【问题标题】:Mysql query issue with multiple table table join多表表连接的Mysql查询问题
【发布时间】:2014-01-06 11:53:58
【问题描述】:

嗨,这是我的桌子

表 1 => 产品

id   product  price active
3    sample   1500   1
4    sample2  2300   2 

表 2 => product_attibute_value

id   product  option_value

1     3         Green
2     3         Red

和表 3 => product_attribute_options

id   product  option_value
1      2        8
2      2        7

我的查询是

SELECT typ.* 
FROM products typ , attibute_value tyav 
WHERE typ.active='1'  AND ( tyav.option_value = 'Green' ) AND typ.id=tyav.product  
GROUP BY typ.id 
ORDER BY typ.price ASC 

这工作正常。现在我也想添加 product_attribute_options 表。

现在我添加了这样的新查询

SELECT typ.* 
FROM products typ , attibute_value tyav, product_attibute_options tyop 
WHERE typ.active='1'  AND ( tyav.option_value = '7' OR tyav.option_value = 'Orange' ) OR 
        ( tyav.option_value = '7' OR tyav.option_value = 'Orange' ) AND 
        typ.id=tyav.product OR typ.id=tyop.product  
GROUP BY typ.id 
ORDER BY typ.price ASC

我在一页中显示选项值,如果我选择此选项(如 8 或橙色),它将显示产品。这个产品应该来自attribute_options 表和attribute_value 表。

它并不完全正确。我在这个查询中做错了什么?提前致谢

【问题讨论】:

    标签: mysql sql select join where-clause


    【解决方案1】:

    试试这个:

    SELECT p.* 
    FROM products p 
    INNER JOIN product_attibute_value pav ON p.id = pav.product 
    INNER JOIN product_attibute_options pao ON p.id = pao.product 
    WHERE p.active = 1 AND ( pav.option_value = '7' OR pao.option_value = '7' )
    GROUP BY p.id 
    ORDER BY p.price ASC
    

    【讨论】:

    • 对不起,我的问题是错误的。我需要 pav.option_value = '7' 或 pao.option_value = '7'
    • 如果我的查询是 SELECT p.* FROM products p INNER JOIN product_attibute_value pav ON p.id = pav.product WHERE p.active = 1 AND ( pav.option_value = 'orange' ) GROUP BY p .id ORDER BY p.price ASC,它会正确显示结果,当我加入选项表时它不会出现
    • @Prakash 你想要什么?具体
    • 如果我的查询是 SELECT typ.* FROM products typ INNER JOIN product_attibute_value tyav ON typ.id=tyav.product INNER JOIN product_attibute_options tyop ON typ.id=tyop.product where typ.active='1 ' AND tyav.option_value = '7' OR tyav.option_value = '7' OR tyop.option_value = '7' GROUP BY typ.id order by typ.price asc LIMIT 0, 8 完美
    • 如果我的查询是 SELECT typ.* FROM products typ INNER JOIN product_attibute_value tyav ON typ.id=tyav.product where typ.active='1' AND tyav.option_value = '7' OR tyav .option_value = 'orange' OR tyop.option_value = 'orange' GROUP BY typ.id order by typ.price asc LIMIT 0, 8 完美
    【解决方案2】:

    最好在每个句子上使用JOIN 句子和条件。

    试试这个:

       SELECT typ.* 
         FROM products typ 
         JOIN attibute_value tyav ON typ.id=tyav.product
         JOIN product_attibute_options tyop ON typ.id=tyop.product
        WHERE typ.active='1'  
          AND ( tyav.option_value = '7' OR tyav.option_value = 'Orange' ) 
     GROUP BY typ.id 
     ORDER BY typ.price asc
    

    【讨论】:

      猜你喜欢
      • 2011-12-15
      • 1970-01-01
      • 2010-12-30
      • 2010-10-18
      • 2013-01-18
      • 2013-03-27
      • 2013-03-05
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多