2013-09-23 39 views
0

我有兩個表格,選項和產品。我想從選項中選擇全部,但只有在任何產品列中都存在options.id時纔可以。這是我的兩個表:Mysql查詢,兩個表。僅當其他表中存在值時才選擇

選項表:

id  option   value 

1  'kategorija' 'Muški' 
2  'kategorija' 'Ženski' 
3  'kategorija' 'Dječji' 
4  'brand'   'Casio' 
5  'brand'   'Lorus' 
6  'brand'   'Seiko' 
7  'brand'   'Citizen' 
8  'mehanizam'  'Quartz' 
9  'mehanizam'  'Automatik' 
10  'mehanizam'  'Eco-Drive' 
11  'brojcanik'  'Analogni' 
12  'brojcanik'  'Digitalni' 
13  'grupa'   'Satovi' 
14  'grupa'   'Naocale' 

和第二臺產品:

id  grupa brand mehanizam brojcanik kategorija 

10380 '13'  '4'  '8'  '11'   '2' 
10560 '13'  '4'  '9'  '12'   '1' 
11100 '13'  '6'  '8'  '11'   '2' 
12380 '14'  '7'  '8'  '11'   '2' 
12490 '13'  '6'  '9'  '11'   '1' 
15720 '14'  '6'  '9'  '12'   '1' 
16550 '14'  '5'  '8'  '12'   '3' 

我嘗試查詢:

SELECT * FROM options WHERE EXISTS(SELECT 1 FROM products WHERE grupa="14" AND brand=options.id OR mehanizam=options.id OR brojcanik=options.id OR kategorija=options.id) 

的結果應該是:

Array 
(
    [0] => Array 
     (
      [id] => 14 
      [option] => grupa 
      [value] => Naocale 
     ) 

    [1] => Array 
     (
      [id] => 7 
      [option] => brand 
      [value] => Citizen 
     ) 

    [2] => Array 
     (
      [id] => 8 
      [option] => mehanizam 
      [value] => Quartz 
     ) 

    [3] => Array 
     (
      [id] => 11 
      [option] => brojcanik 
      [value] => Analogni 
     ) 

    [4] => Array 
     (
      [id] => 2 
      [option] => kategorija 
      [value] => Zenski 
     ) 
) 

這是數組僅適用於產品ID爲12380的一行,即grupa 14.數組應該繼續用於產品行中存在grupa 14的其餘產品。 我不知道這是否只能用mysql查詢。如果這是不可能的,我將不得不做與php比較,這是我試圖避免的。

感謝

+0

爲什麼選擇:'5','8','3','6','9','1'不包括在內? –

+0

不包括在哪裏?在數組中? – user2499170

+0

被刪除的答案對我來說工作得很好。不知道爲什麼被刪除。 – user2499170

回答

3

我想所有的選項,但只有當選擇options.id存在於產品列的任何 中。

您可以在子查詢中使用結合所有UNION ALL值,並加入與表options的結果。

SELECT DISTINCT a.* 
FROM options a 
     INNER JOIN 
     (
      SELECT brand col FROM products WHERE grupa = 14 
      UNION ALL 
      SELECT mehanizam col FROM products WHERE grupa = 14 
      UNION ALL 
      SELECT brojcanik col FROM products WHERE grupa = 14 
      UNION ALL 
      SELECT kategorija col FROM products WHERE grupa = 14 
     ) b ON a.id = b.col 

更好的方法,

SELECT * 
FROM options a 
WHERE EXISTS 
     ( 
      SELECT 1 
      FROM products b 
      WHERE b.grupa = '14' AND 
        a.ID IN (brand, mehanizam, brojcanik, kategorija) 
     ) 
+0

我不知道該如何謝謝。我正在爲這個查詢苦苦掙扎兩天,而且這個工作非常好。謝謝 – user2499170

+0

我很親密。我必須在兩個產品列中使用LIKE。 IN或其他方式有辦法嗎? – user2499170

0

而是採用專門14你可以options根據您的語句只是加入再次

WHERE EXISTS (SELECT 1 FROM products JOIN options ON id = grupa ... 
+0

對不起,但我不能用這個做一個有效的查詢。你能否提出一個完整的查詢? – user2499170

+0

+1爲最短的答題 –

相關問題