当我在MySQL中尝试下面的代码时,我真的很惊讶:
SELECT * FROM table WHERE (key='free_shipping' and value='yes') AND (key='price' and value='5')
它不起作用。我需要同时获得 free_shipping 的产品为'是'且价格等于'5'。如何正确创建此查询?
表格结构:
内容:(表1)
CONTENT_ID TITLE DESCRIPTION DATE
content_fields:(表2)
FIELD_ID CONTENT_ID KEY_NAME VALUE
示例(获取具有1个ID并且其运送免费的产品):
SELECT * FROM `contents` as c LEFT JOIN `content_fields` as cf ON c.content_id = cf.content_id WHERE c.content_id = 1 AND cf.key_name = 'free_shipping' AND cf.value = 'yes'
答案 0 :(得分:7)
您当前的查询是矛盾的,因为单行永远不能匹配WHERE子句。我想你想要这样的东西。
SELECT product_id
FROM table
WHERE (key='free_shipping' and value='yes') or (key='price' and value='5')
GROUP BY product_id
HAVING COUNT(DISTINCT key) = 2
答案 1 :(得分:5)
试试这个:
WHERE free_shipping='yes' AND price='5'
或:
WHERE free_shipping=yes AND price=5
如果字段不是字符串
答案 2 :(得分:1)
括号不会改变本声明的含义。没有他们你就有了:
key='free_shipping' and value='yes' and key='price' and value='5'
=>
key='free_shipping' and key='price'
=>
nothing!
尝试WHERE free_shipping='yes' AND price='5'
修改强>: 废弃物,我现在对你的桌子感到困惑。它只是一堆键/值对吗?我们能看到表结构吗?
答案 3 :(得分:1)
获得免费送货的产品,价值5 ...... 选择不同的x.TITLE 从 内容x,content_fields y,content_fields z 哪里 x.CONTENT_ID = y.CONTENT_ID和 y.CONTENT_ID = z.CONTENT_ID和 y.key_name ='free_shipping'和y.value ='yes'和 z.key_name ='price'和z.value ='5'