我想多次使用同一个字段。我厌倦了一个查询,但没有得到正确的结果。
这是我的数据库结构:
wp_postmeta:
这是我的查询:
SELECT wp.ID FROM wp_postmeta wpm
LEFT JOIN
wp_posts wp ON (wp.ID = wpm.post_id)
WHERE
wp.post_parent=7886 AND
wpm.meta_key = 'attribute_pa_size' AND
wpm.meta_value="l" AND
wpm.meta_key = 'attribute_pa_with-bro-kalam-blouse' AND
wpm.meta_value="no"
here i want to get result
ID 7951
.
最佳答案
您需要在此处进行某种聚合以隔离元表中的键和值。这样的事情应该有效:
SELECT wp.ID
FROM wp_postmeta wpm
LEFT JOIN wp_posts wp
ON wp.ID = wpm.post_id
WHERE
wp.post_parent = 7886
GROUP BY
wp.ID
HAVING
MAX(CASE WHEN wpm.meta_key = 'attribute_pa_size'
THEN wpm.meta_value END) = 'l' AND
MAX(CASE WHEN wpm.meta_key = 'attribute_pa_with-bro-kalam-blouse'
THEN wpm.meta_value END) = 'no';
要了解上述数据透视技巧的工作原理,请考虑以下(单个)键和值表:
ID | meta_key | meta_value
1 | attribute_pa_size | l
1 | attribute_pa_with-bro-kalam-blouse | no
2 | attribute_pa_size | l
2 | attribute_pa_with-bro-kalam-blouse | yes
通过聚合ID
,我们可以梳理出我们想要的任何键的值。例如,要检查 attribute_pa_with-bro-kalam-blouse
键的值,我们可以使用:
MAX(CASE WHEN meta_key = 'attribute_pa_with-bro-kalam-blouse'
THEN meta_value END)
这是有效的,因为 MAX
评估的值要么是 NULL
,当行没有正确的键时,要么是 meta_value
当 key 确实匹配时。请注意,MAX
(以及大多数聚合函数)会忽略 NULL
值。
关于php - MySQL在where子句中多次查询同一个字段,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52983626/