2012-06-30 62 views
0

感謝您對此有所幫助;) 我是新來的SQL,希望解決somethign只是一個查詢,我不知道該怎麼做.-SQL選擇 - >產品 - >評論 - >用戶

基本上我有一個產品表,用戶的表和意見表,請按products.id連接 - > comments.pid和user.id - > comments.uid,

我想知道創建1個查詢並獲取包含子註釋的所有產品(包括用戶名)的最佳做法是什麼?

+1

結果你也想嘗試寫一行代碼整個應用程序?如果您需要兩個查詢,請使用兩個查詢。 –

+1

同意Mark,如果您考慮在一個查詢中獲取所有這些數據,則將您的應用程序的不同部分組合起來。相反,將評論與產品分開會更有意義。這樣你可以更高效地工作。接下來,情況在將來可能會變得更加複雜,例如,您還需要產品的類別。只需SELECT id,nam FROM products WHERE id = 1和另一個查詢:SELECT users.name,comments.comment FROM INNER INNER將用戶加入users.id = comments.uid WHERE註釋。pid = 1 –

+0

馬克,我同意你在一個頁面上顯示一個產品的數據,但是如果你需要創建一個像pinterest這樣的產品列表......你認爲這是循環槽產品列表的最佳做法多個查詢?在一個交通繁忙的網站上,這可能會導致服務器無法使用.-只是想想列出100個產品,並從每個網站獲得5條評論.-將會有101條查詢,而使用連接的條件是1條,我的問題是我不知道連接的限制,因爲我是新進入sql.- – DiegoMol

回答

0

Istead使用JOIN你可以試試這個的,

select p.id,u.name,c.data 
from products as p,user as u,comment as c 
where p.id = c.pid and u.id = c.uid; 
+1

[爲什麼SQL ANSI-92標準沒有被ANSI-89更好地採用?](http://stackoverflow.com/questions/334201/why-isnt-sql-ansi-92-standard -better-adopt-by-ansi-89) –

+1

另外,我懷疑在這種情況下,如果產品沒有評論,外連接是必要的。 – eggyal

+0

@eggyal這兩個用戶都與評論和評論只有那些將被顯示的用戶產品.. –

4

瞭解SQL joins

SELECT * 
FROM products 
    LEFT JOIN comments ON products.id = comments.pid 
    LEFT JOIN user  ON user.id  = comments.uid 
+0

謝謝m8 ...工作正常;) – DiegoMol

1

學習加入是爲了解決這樣的問題

說明

的最佳方式

我們在這裏要做的是創建一個虛擬表,它根據一些關係提取記錄。

我已經創建了三個在這裏表

  • 產品
  • 用戶
  • 評論

且有

  1. 產品和意見表之間建立的關係 - 使用product.id和comments.prod_i d
  2. 用戶和意見表 - 使用user.id和comments.user_id

現在你可以使用加入到過濾結果

SELECT product.id,user.name,comments.DATA FROM comments LEFT JOIN product ON comments.prod_id = product.id INNER JOIN USER ON comments.user_id = USER.id;

,或者如果你不想使用加入您可以簡單地創建一個關係 但請注意,使用連接可能是最好的方式做到這一點

SELECT product.id,USER.name,comments.DATA 
FROM product,USER,comments 
WHERE product.id = comments.prod_id AND USER.id = comments.user_id; 

您可以點擊這裏

SqlFiddle