如何使用php从另一个表中获取一个表字段值
I have a database table cranedetails(fields are : cf_did , cf_firstname, cf_cranetype
)
cf_did cf_firstname cf_cranetype
1 Alexy 2,3
2 Thomas 11,6,3
3 Thomas 5,6,11,3
4 Thomasxc 1,6,9,4
5 Thomaseg 11,12,3
I have another table cranetype (cf_did,cf_cname
)
cf_ctid cf_ctname
1 MOBILE CRANES
2 ROUGH TERRAIN CRANES
3 ALL TERRAIN CRANES
4 CRAWLER CRANES
5 YARD CRANES
6 ARICULATING BOOM CRANES
7 TRUCK CRANES: ARTICULATING BOOM
8 TRUCK CRANES: LATTICE BOOM
9 TRUCK CRANES: TELESCOPIC BOOM
10 TRUCK LOADER CRANES
11 ELEVATORS
12 ELEVATOR – HYDRAULIC
I want to display values like this, eg:
id: name: cranetype
1 Alexy ROUGH TERRAIN CRANES,ALL TERRAIN CRANES
2 Thomas ELEVATORS,ARICULATING BOOM CRANES,ALL TERRAIN CRANES
and so on.
How to get table cranedetails field cf_cranetype
values (2,3
) name from table cranetype
cf_ctnamefield
(ROUGH TERRAIN CRANES,ALL TERRAIN CRANES).
I am sect $did=1. and use this code
$sql=mysql_query("SELECT * FROM `cf_directory` WHERE `cf_did` = '$did'",$con);
$row = mysql_fetch_array($sql);$cn= $row['11'];
$sql2=mysql_query("SELECT * FROM `cf_cranetype` WHERE `cf_ctid`= '$cn'",$con);
<?php while($row2 = mysql_fetch_array($sql2)){
$cranename=$row2['cf_ctname']; ?>
<?php echo $cranename;?>
but the output is:
id: name: cranetype
1 Alexy ROUGH TERRAIN CRANES
I want:
id: name: cranetype
1 Alexy ROUGH TERRAIN CRANES,ALL TERRAIN CRANES
我有一个数据库表cranedetails(字段是: 我有另一个表cranetype( 我想要 要显示这样的值,
eg: p>
等等。 p>
如何从表 我是教派$ did = 1。 并使用此代码 p>
但输出为: p>
我想: p>
cf_did,cf_firstname,cf_cranetype code>)
cf_did cf_firstname cf_cranetype
1 Alexy 2,3
2 Thomas 11,6,3
3 Thomas 5,6,11,3
4 Thomasxc 1,6,9,4
5 Thomaseg 11,12,3
code> pre>
cf_did,cf_cname code>) p>
cf_ctid cf_ctname
1移动式起重机
2个粗糙地形起重机
3个全地形起重机
4个履带式起重机
5个起重机
6个动臂起重机
7个卡车起重机:铰接式起重机 n 8卡车起重机:LATTICE BOOM
9卡车起重机:TELESCOPIC BOOM
10卡车装载机起重机
11 ELEVATORS
12 ELEVATOR - HYDRAULIC
code> pre>
id:name:cranetype
1 Alexy ROUGH TERRAIN CRANES,所有地形起重机
2 Thomas ELEVATORS,驾驶摇臂起重机,所有地形起重机
code> pre>
cranetype code> cf_cranetype code>值(
2,3 code>) 代码> cf_ctnamefield code>(粗糙地形起重机,所有地形起重机)。 p>
$ sql = mysql_query(“SELECT * FROM`cf_directory` WHERE`cf_did` ='$ did'”,$ con);
$ row = mysql_fetch_array($ sql); $ cn = $ row ['11'];
$ sql2 = mysql_query(“SELECT * FROM`cf_cranetype` WHERE`cf_ctid` ='$ cn'”,$ con);
&lt;?php while($ row2 = mysql_fetch_array($ sql2)){
$ cranename = $ ROW2 [ 'cf_ctname']; ?&gt;
&lt;?php echo $ cranename;?&gt;
code> pre>
id:name:cranetype
1 Alexy ROUGH TERRAIN CRANES
code> pre>
id: 名称:cranetype
1 Alexy ROUGH TERRAIN CRANES,所有地形起重机
code> pre>
div>
You can use simply GROUP_CONCAT()
together with FIND_IN_SET()
for that:
SELECT
cd.cf_did AS id,
cd.cf_firstname AS name,
GROUP_CONCAT(ct.cf_ctname SEPARATOR ', ') AS cranetype
FROM
cranedetails cd,
cranetype ct
WHERE
FIND_IN_SET(ct.cf_ctid, cd.cf_cranetype)
GROUP BY
cd.cf_did,
cd.cf_firstname
Output is:
+----+----------+---------------------------------------------------------------------------------------+
| id | name | cranetype |
+----+----------+---------------------------------------------------------------------------------------+
| 1 | Alexy | ROUGH TERRAIN CRANES, ALL TERRAIN CRANES |
| 2 | Thomas | ARICULATING BOOM CRANES, ELEVATORS, ALL TERRAIN CRANES |
| 3 | Thomas | ALL TERRAIN CRANES, YARD CRANES, ARICULATING BOOM CRANES, ELEVATORS |
| 4 | Thomasxc | CRAWLER CRANES, ARICULATING BOOM CRANES, TRUCK CRANES: TELESCOPIC BOOM, MOBILE CRANES |
| 5 | Thomaseg | ALL TERRAIN CRANES, ELEVATORS, ELEVATOR – HYDRAULIC |
+----+----------+---------------------------------------------------------------------------------------+
5 rows in set
If you want to group the result only by name (because there are duplicated names), just remove cd.cf_did
from the query and add DISTINCT
to filter duplicated cranetype
values, i.e:
SELECT
cd.cf_firstname AS name,
GROUP_CONCAT(DISTINCT ct.cf_ctname SEPARATOR ', ') AS cranetype
FROM
cranedetails cd,
cranetype ct
WHERE
FIND_IN_SET(ct.cf_ctid, cd.cf_cranetype)
GROUP BY
cd.cf_firstname
Result will be:
+----------+---------------------------------------------------------------------------------------+
| name | cranetype |
+----------+---------------------------------------------------------------------------------------+
| Alexy | ROUGH TERRAIN CRANES, ALL TERRAIN CRANES |
| Thomas | ELEVATORS, ALL TERRAIN CRANES, YARD CRANES, ARICULATING BOOM CRANES |
| Thomaseg | ELEVATORS, ELEVATOR – HYDRAULIC, ALL TERRAIN CRANES |
| Thomasxc | TRUCK CRANES: TELESCOPIC BOOM, MOBILE CRANES, CRAWLER CRANES, ARICULATING BOOM CRANES |
+----------+---------------------------------------------------------------------------------------+
4 rows in set
Use sub queries to fetch this for reference http://dev.mysql.com/doc/refman/5.7/en/subqueries.html
For me, it looks like you are storing a string value (or VARCHAR) of integer values (your cranetype ids) joined by comma.
If so, I would consider redesigning your database to have a table e.g.
- cranenames with cf_nid, cf_firstname
- cranetypes with cf_ctid cf_ctname
- cranedetails with cf_did, cf_nid, cf_ctid
In the cranedetails, make an entry for every cranetype associated with a cranename. The cf_nid and cf_ctid shoul be, of course, foreign key relations to the respective tables.
With your current design, you would have to explode the string value of your cf_cranetype to get an array of integers (or strings, looking like integers), and your second query had to look like this:
"SELECT * FROM cf_cranetype WHERE cf_ctid IN '" . join($YOUR_ARRAY, ',') . "'"