如何使用php从另一个表中获取一个表字段值

如何使用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 *

我有一个数据库表cranedetails(字段是:
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>

  • ChannEngas,CFJNID,CFI FieldNest
  • 带有cf\u ctid cf\u ctname的cranetypes
  • 带有cf\U did、cf\U nid、cf\U ctid的cranedetails

    在cranedetails中,为与cranename关联的每个cranetype创建一个条目。当然,cf_nid和cf_ctid应该是与相应表的外键关系

    在当前的设计中,必须分解cf_cranetype的字符串值以获得整数数组(或字符串,看起来像整数),第二个查询必须如下所示:
    “从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