php - MySQL在where子句中多次查询同一个字段

标签 php mysql wordpress

我想多次使用同一个字段。我厌倦了一个查询,但没有得到正确的结果。

这是我的数据库结构:

wp_postmeta:

enter image description here

wp_posts: enter image description here

这是我的查询:

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/

相关文章:

mysql - SQL 多个 WHERE IN

wordpress - 产品页面上的 WooCommerce 后退按钮

php - 带有选择的下拉列表

PHP:使用 preg_replace 过滤一些 html 属性。获取第一个 </span>,而不是最后一个

php - 如何在线程中组织图像?

mysql - 在 Filezilla 中安装 phpmyadmin

php - 字符串到 int 转换 php 更改值

php - 对数组进行排序,其中包含一些按天排序的日期,例如 php 中的星期日、星期一等

php - 我想从 codeigniter (mysql) 中的数据库表中选取最近三天的数据

mysql - 查询绑定(bind)添加斜杠..阻止我进行搜索