我有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>';
}
但它没有显示不匹配的行
答案 0 :(得分:1)
您需要JOIN
。
SELECT * FROM client LEFT JOIN customer ON customer.parent_client_id = client.id;
你提供的信息不是很多,所以我对我提出的查询可能有误,但你真的需要使用一些JOIN
,所以我会给你一些东西来阅读。
INNER JOIN
LEFT JOIN
RIGHT JOIN
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
)
答案 1 :(得分:0)
select cl.*
from client cl
inner join customer cu on cl.parent_client_id = cu.customerid
答案 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) ";
(database1
和database2
是您的数据库名称。)
您还需要确保您在PHP连接中使用的用户当然有权访问这两个数据库。