2013-09-23 36 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为最短的答题 –

相关问题