0

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

客户表

  • 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,我怎样才能让它们都显示而不仅仅是一个?

4

2 回答 2

0

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

于 2012-07-31T06:31:00.400 回答
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%')
于 2012-07-30T04:12:16.043 回答