如何使用php从另一个表中获取一个表字段值
我有一个数据库表cranedetails(字段是:如何使用php从另一个表中获取一个表字段值,php,mysql,Php,Mysql,我有一个数据库表cranedetails(字段是:cf\u-did、cf\u-firstname、cf\u-cranetype) 我有另一个表cranetype(cf\u did,cf\u cname) 我想显示这样的值, 例如: 等等 如何从表cranetypecf\u cranetype中获取表cranedetails字段cf\u cranetype值(2,3)名称(崎岖不平的地面起重机、全地形起重机) 我是$did=1。然后使用这个代码 $sql=mysql_query("SELECT *
cf\u-did、cf\u-firstname、cf\u-cranetype
)
我有另一个表cranetype(cf\u did,cf\u cname
)
我想显示这样的值,
例如:
等等
如何从表cranetype
cf\u cranetype
中获取表cranedetails字段cf\u cranetype
值(2,3
)名称(崎岖不平的地面起重机、全地形起重机)
我是$did=1。然后使用这个代码
$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;?>
我想:
id: name: cranetype
1 Alexy ROUGH TERRAIN CRANES,ALL TERRAIN CRANES
使用子查询获取此文件以供参考对于我来说,它看起来像是在存储由逗号连接的整数值(您的cranetype ID)组成的字符串值(或VARCHAR)
如果是这样的话,我会考虑重新设计你的数据库,如表,如
UL>
“从cf_ctid所在的cf_cranetype中选择*”。加入($YOUR_数组,“,”)。“'”
您可以简单地使用组CONCAT()
和在集合中查找()
来实现:
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
输出为:
+----+----------+---------------------------------------------------------------------------------------+
| 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
如果只想按名称对结果进行分组(因为存在重复的名称),只需从查询中删除cd.cf_did
,然后添加DISTINCT
以过滤重复的cranetype
值,即:
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
结果将是:
+----------+---------------------------------------------------------------------------------------+
| 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
你真的应该重新格式化问题和代码示例,使其更具可读性。
GROUP\u CONCAT()
和FIND\u IN\u SET()
可以实现这个技巧,请参见下文。先生,这段代码“SELECT*FROM cf\u cranetype WHERE cf\u ctid IN”。加入($YOUR_数组,“,”)。“'”无效。您是否重写了代码以获取所需的列并将其分解为数组(在我的示例中为$your_数组)?太好了!选择答案以关闭主题。好的..还有一个问题..如何检查此代码中的t条件选择cd.cf_firstname作为名称,选择GROUP_CONCAT(不同的ct.cf_ctname分隔符',')作为cranetype FROM cranedetails cd,cranetype ct WHERE FIND_in_SET(ct.cf_ctid,cd.cf_cranetype)按cd.cf_firstname分组我要检查cd.cf_payment='top'和cd.status='1'。我要检查cd.cf_payment='top'和cd.status='1'。我使用此代码选择cd.cf_did作为id,cd.cf_companyname作为名称,cd.cf_描述作为描述,cd.cf_payment作为付款,cd.cf_status作为状态,GROUP_CONCAT(ct.cf_ctname分隔符','))作为cf_目录cd中的cranetype,cf_cranetype ct WHERE cd.cf_payment='top',cd.cf_status='1',并按cd.cf_did,cd.cf_companyname,cd.cf_description,cd.cf_payment,cd.cf_status ORDER By cd.cf_did,cd.cf_cranetype按cd.cf_定义的组中的cranetype。但不起作用
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
+----+----------+---------------------------------------------------------------------------------------+
| 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
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
+----------+---------------------------------------------------------------------------------------+
| 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