在PHP中将2个不同表中的1列匹配在一起

时间:2013-10-23 07:42:05

标签: php mysql sql database

我有2个MySQL数据库,

一个带有customer表,另一个带有client表。

客户表中的

有一个名为customerid的列,在另一个数据库的客户端表中,有一个名为parent_client_id的列

我希望能够从客户端表中选择所有数据,并确保在customer表中有一行匹配。

我希望能够显示来自客户端表中不在客户表中的每一行的数据

我怎么能用PHP做到这一点?

我试过这个:

$sql="SELECT * from client ";
$rs=mysql_query($sql,$pbx01_conn);
while($result=mysql_fetch_array($rs))
{
    $sql2="SELECT * from customer where customerid NOT IN( SELECT * from customer where customerid = '".$result["parent_client_id"]."' ) ";
    echo $sql2;
    $rs2=mysql_query($sql2,$conn) or die(mysql_error());
    $result2=mysql_fetch_array($rs2);
    echo $result2["company"].'<br>';
}

但它没有显示不匹配的行

4 个答案:

答案 0 :(得分:1)

您需要JOIN

SELECT * FROM client LEFT JOIN customer ON customer.parent_client_id = client.id;

你提供的信息不是很多,所以我对我提出的查询可能有误,但你真的需要使用一些JOIN,所以我会给你一些东西来阅读。

  1. INNER JOIN
  2. LEFT JOIN
  3. RIGHT JOIN
  4. FULL JOIN

  5. OP编辑后。

    您以错误的方式使用mysql_fetch_array,您应该:

    while ($row = mysql_fetch_array($rs2)) 
    {
        echo $row['company'] . '<br>';
    }
    

    因为这里可能有更多结果,但您可能希望只有一个查询,即:

    SELECT * FROM customer
    FULL JOIN client 
    ON client.parent_client_id = customer.customerid
    WHERE customer.customerid 
    NOT IN 
        (
            SELECT FROM customer
            INNER JOIN client
            ON client.parent_client_id = customer.customerid
            WHERE 1
        )
    

答案 1 :(得分:0)

select cl.* 
from client cl
inner join customer cu on cl.parent_client_id = cu.customerid

请参阅this great explanation of joins

答案 2 :(得分:0)

SELECT * FROM customer cu RIGHT JOIN client cl ON cu.parent_client_id = cl.id;

答案 3 :(得分:0)

如果您使用两个不同的数据库,则需要在SQL查询中使用数据库名称作为表名称的前缀。所以:

$sql2="SELECT * from database1.customer where customerid NOT IN( SELECT parent_client_id from database2.customer) ";

database1database2是您的数据库名称。)

您还需要确保您在PHP连接中使用的用户当然有权访问这两个数据库。