2012-07-30 40 views
0

我试图为我的数据库创建一个搜索表单,用户可以搜索客户名称并显示所有客户地址。我的结构看起来像这样mysql选择连接时没有显示来自同一个表的多行的查询

Customer表

  • 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,我怎样才能让它们同时处理被显示而不只是一个?

回答

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

我仍然在使用这个 – dan 2012-07-31 02:52:24

+0

@dan时遇到同样的问题你可以在你的问题中包含一些样本数据吗?我相信这应该按照你描述它的方式工作。 – 2012-08-02 05:35:34

0

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

相关问题