繁体   English   中英

带有连接的MySQL选择查询不显示同一表中多行的结果

[英]mysql select query with join not showing the results of multiple rows from the same table

我正在尝试为我的数据库创建一个搜索表单,用户可以在其中搜索客户名称,并且将显示所有这些客户地址。 我的结构看起来像这样

客户表

  • ID
  • 名字
  • 公司名

地址表

  • ID
  • 1行
  • 邮编
  • 顾客ID

站点表

  • ID
  • 地址ID
  • 笔记

我将名字,姓氏或公司名称作为输入并将其存储为变量以及他们要搜索的列,然后使用以下查询来检查数据库是否符合条件

$data = mysql_query("SELECT * FROM customer INNER JOIN address ON customer.ID = address.Customer_ID INNER JOIN sites ON address.ID = sites.address_ID WHERE upper(customer.$field) LIKE'%$query%'") ;/

我使用打印结果

    while($results = mysql_fetch_array($data)){
            echo "<br>"; 
            echo $results['First_Name']; 
            echo " "; 
            echo $results['Surname']; 
            echo $results['town']; 
            echo " "; 
            echo $results['postcode'];

当一个客户有多个地址时,就会发生此问题。 家庭地址和站点地址不同。 该查询将仅打印地址之一,即站点地址(第二个提交,似乎覆盖了家庭地址)

在地址表中,这两个地址都包含相同的Customer_ID,如何显示它们而不是仅显示一个?

您需要使用搜索查询找到客户,然后返回并获取该特定客户的所有记录。 作为子查询这样做应该可以解决问题:

SELECT ...
FROM Customer
INNER JOIN address ON customer.ID = address.Customer_ID 
INNER JOIN sites ON address.ID = sites.address_ID 
WHERE Customer.ID IN (SELECT ID 
                      FROM customer 
                      INNER JOIN address ON customer.ID = address.Customer_ID 
                      INNER JOIN sites ON address.ID = sites.address_ID 
                      WHERE upper(customer.$field) LIKE'%$query%')

我认为您在连接SITES时应使用LEFT OUTER JOIN。 如果您使用INNER JOIN,则会丢失其ID不在site.address_id中的ADDRESS记录。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM