【问题标题】:how to select multiple key value from one table with one query?如何通过一个查询从一张表中选择多个键值?
【发布时间】:2018-01-17 19:18:35
【问题描述】:

这是示例产品属性表

product_id  property_id property_value
5           1           white
5           2           50
5           3           50
5           4           55
5           5           mm
6           8           cm

我想动态过滤我的产品。例如:

select property_id 1 and property_value white
AND
select property_id 2 and property_value 50
AND
select property_id 4 and property_value 55
AND
etc ...

我可以从基本查询进行动态查询。当我一起使用所有条件时,没有记录匹配,因为所有条件运算符都是 AND。什么是最好的查询? 谢谢你的回答。

【问题讨论】:

  • 一行怎么能符合所有这些条件?
  • 没有一行,我希望所有行都与分隔条件匹配。 (property_id property_value)

标签: php mysql codeigniter


【解决方案1】:

听起来您使用了错误的关键字。在标准集之间使用OR 而不是AND

SELECT DISTINCT product_id

FROM product_properties

WHERE
(property_id = 1 and property_value = 'white')
OR
(property_id = 2 and property_value = '50')
OR
(property_id = 4 and property_value = '55')
OR
etc ...

如果您只希望每个product_id 中的一个与各种条件匹配,则可以使用DISTINCT,或者不使用它以便为匹配的每一行获取一个。

【讨论】:

  • 因为我想要所有具有这些属性的产品。
  • 可能需要property_id=1 and property_value='white'等等。
  • @tadman 谢谢,是的。我只是复制/粘贴,我看到越来越多我忽略的东西在变化
【解决方案2】:

标题##基本查询是:

SELECT
  a.`*`,b.`*`
FROM
  properties AS a
JOIN
  properties AS b
ON
  a.`product_id` = b.`product_id`
WHERE
    a.`property_id` = '1' AND a.`property_value` = 'white' 
    AND 
    b.`property_id` = '2' AND b.`property_value` = '50'

感谢@mikhail-vladimirov https://stackoverflow.com/a/15208055/5129662

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-01
    • 2011-11-26
    • 2017-12-23
    • 1970-01-01
    • 2013-11-15
    • 2019-03-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多