mysql选择查询,连接不显示同一个表中多行的结果

时间:2012-07-30 04:05:50

标签: mysql database relational-database

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

客户表

  • ID
  • 名字
  • 姓氏
  • 公司名称

地址表

  • ID
  • 第1行
  • 邮政编码
  • CUSTOMER_ID

网站表

  • ID
  • ADDRESS_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,如何才能显示它们而不仅仅是一个?

2 个答案:

答案 0 :(得分:0)

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

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%')

答案 1 :(得分:0)

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