2012-07-30 18 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記錄。

相關問題