2016-02-08 30 views
4

我叫2個表:1)產品2)product_images和它的數據是這樣的:爲什麼mysqli左連接返回1多行?

products table : 
============== 
ProductID Title  model_number 
----------------------------------- 
1   title1  123 
2   title2  124 
3   title3  125 
4   title4  126 
5   title5  127 

product_images 
============== 
pi_id p_id product_image 
------------------------------ 
1  1  image1 
2  2  image2 
3  3  image3 
4  4  image4 
5  1  image1 

所以如果我運行此查詢它的返回5行,這是正確的:

$q=mysqli_query($conn, "SELECT * FROM products"); 
echo $n=mysqli_num_rows($q); // return 5 rows 

但如果我運行這個查詢,它會返回6行,爲什麼?它應該顯示5行!

$searchQuery = mysqli_query($conn, "SELECT products.ProductID, 
products.Title, products.model_number, product_images.product_image FROM 
products LEFT JOIN product_images ON products.ProductID = 
product_images.p_id "); 

$isExist = mysqli_num_rows($searchQuery); // return 6 rows 

你能告訴我爲什麼它會返回1行以及如何解決它?謝謝。

其實我想用適當的圖像顯示所有產品。

+4

由於使用'LEFT JOIN'和'product_images'表,你有兩個圖像用於同一產品(p_id = 1) – sergio

+1

如果在第二個表中不存在外鍵,則在左連接中,請閱讀左邊的連接:-http://www.w3schools.com/sql/sql_join_left.asp – rahul

+0

我想用適當的圖像顯示所有產品。所以如果它返回多一行,那麼用戶將不會獲得實際的數據數量。所以我需要顯示正確數量的數據。我怎樣才能做到這一點 ? –

回答

1

您已使用LEFT JOIN。你有兩個記錄p_id=1;所以你有6排。

如果您想讓p_id爲唯一,請在您的查詢中使用GROUP_BY

如下編寫查詢: -

SELECT products.ProductID, 
products.Title, products.model_number, product_images.product_image FROM 
products LEFT JOIN product_images ON products.ProductID = 
product_images.p_id GROUP BY product_images.p_id; 

希望它會幫助你:)

+0

哇這樣的產品選擇圖像。它的工作:) –

+0

但在這種情況下,你不會得到產品的所有圖像 – sergio

+0

相同的p_id具有相同的圖像名稱。所以沒有問題,但如果1個產品有多個圖像,則不需要GROUP BY子句。如果每個產品只有一個圖像需要,那麼這個查詢工作正常:) –

1

,因爲你有2個相同p_id=1product_images