2015-01-05 93 views
-1

我有5個表:如何在MySQL中連接表格?

  1. 網站
    • ID
    • 站點名稱
  2. 類別
    • ID
  3. 產品
    • ID
    • 和一些-更多柱
  4. x_products_site
    • PRODUCT_ID
    • SITE_ID
  5. x_products_categories
    • PRODUCT_ID
    • CATEGORY_ID

現在,我想從一個類別的產品的所有數據(假設所有的類ID爲1 ),但只有某個產品適用於特定的網站。

我第一次嘗試是

SELECT p.* 
    FROM `products` p, 
     `categories` c, 
     `x_product_site` xps, 
     `x_product_category` xpc 
    WHERE c.`id` = '%1\$s' 
    AND c.`id` = xpc.`category_id` 
    AND xpc.`product_id` = xps.`product_id` 
    AND p.`id` = xpc.`product_id` 
    ORDER BY p.`name` ASC 

顯然,這不是做的方式。

有人可以給我一個正確的查詢有或沒有連接?

+0

你爲什麼不使用一些ORM? Thiás將會成爲ORM中的一塊蛋糕,並且會是手工的痛苦。 – MightyPork

+0

@MightyPork世界被覆蓋在你不能使用的應用程序中 - 「僅使用ORM」_ - 例如,現有應用程序的負載不會被轉換。 –

+0

使用連接,添加AND運算符不是解決方案。 –

回答

2

試試這個:

如果你有SITE_ID然後用下面的查詢:

SELECT P.id, P.name 
FROM products P 
INNER JOIN x_products_categories PC ON P.id = PC.product_id AND PC.category_id = 1 
INNER JOIN x_products_site PS ON P.id = PS.product_id 
WHERE PS.site_id = 1 
ORDER BY P.name; 

如果你有SITE_NAME然後用下面的查詢:

SELECT P.id, P.name 
FROM products P 
INNER JOIN x_products_categories PC ON P.id = PC.product_id AND PC.category_id = 1 
INNER JOIN x_products_site PS ON P.id = PS.product_id 
INNER JOIN sites S ON PS.site_id = S.id 
WHERE S.site_name LIKE '%site_name%' 
ORDER BY P.name; 
+0

謝謝!像魅力一樣工作。我慢慢地得到JOIN的東西。 現在它是這樣的(因爲我需要通過Categorie名稱而不是ID(我的壞,沒有提及,我的例子是錯的)) SELECT P.id,P.title FROM products P INNER JOIN x_product_category PC ON P.id = PC.product_id INNER JOIN x_product_site PS ON P.id = PS.product_id INNER JOIN類別C ON PC.category_id = C.id INNER JOIN sites S ON PS.site_id = S .id WHERE C.name LIKE'%zelfvertrouwen%' AND S.id = 2 ORDER BY P.title – D3F

1
SELECT 
    p.* 
FROM 
    products p 
    , categories c 
    , sites s 
    , x_product_categories xpc 
    , x_product_site xps 
WHERE xpc.category_id = c.id 
    AND xpc.product_id = p.id 
    AND xps.product_id = p.id 
    AND xps.site_id = s.id 
    AND s.sitename = "site1" 
    AND c.id = 1 ; 
+0

請添加評論的投票,這將有助於用戶找出他的錯誤。 –

+0

(-1):格式不正確,如何在沒有連接的情況下工作? – musefan

+0

他正在使用與CROSS JOIN相同的「產品p,類別c,網站s」。 –

0

沒有必要加入表格。畢竟,你只想從產品中選擇。使用IN子句查看是否在其他表中。這裏根本不需要表格類別。該表沒有給我們提供任何所需的信息。

比方說,你想要的產品爲1類和第5現場

select * 
from products 
where product_id in (select pc.product_id from x_product_category pc where pc.id = 1) 
and product_id in (select ps.product_id from x_product_site ps where ps.id = 5); 

爲了完整起見,你可以用存在相同的。 (唉,畢竟,你要知道,如果與產品一個記錄存在另一個表中

select * 
from products p 
where exists (select * from x_product_category pc where pc.product_id = p.id and pc.id = 1) 
and exists (select * from x_product_site ps where ps.product_id = p.id and ps.id = 5);