0

我有 2 个 MySQL 数据库,

一个带customer桌子,另一个带client桌子。

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

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

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

我怎样才能使用 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

4 回答 4

1

你需要JOIN.

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

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

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

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
    )
于 2013-10-23T07:45:12.280 回答
0
select cl.* 
from client cl
inner join customer cu on cl.parent_client_id = cu.customerid

看到这个关于连接的精彩解释

于 2013-10-23T07:43:50.740 回答
0
SELECT * FROM customer cu RIGHT JOIN client cl ON cu.parent_client_id = cl.id;
于 2013-10-23T07:44:30.987 回答
0

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

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

(您的数据库名称在哪里database1以及在哪里。)database2

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

于 2013-10-23T08:01:47.917 回答