2016-01-14 68 views
0

对于Wordpress项目,我想将多个查询合并为一个使用子查询。我正在使用MySQL 5.5.42。第一种情况是查询表wp_categories中的member_ids列表,然后使用结果列表查询wp_postmeta表中的post_id列中的匹配ID。Mysql按子查询返回的列表查询

我所拥有的就是这个至今

SELECT post_id 
FROM wp_postmeta 
WHERE meta_value IN ( 
    SELECT member_ids 
    FROM wp_categories 
    WHERE id=140) 
AND meta_key='bizid' 

这似乎是空手而归,不过,当我与一个有效的值替换子查询,我得到有效的结果。

编辑: 这个答案已经离开我与查询解决方案(https://stackoverflow.com/a/22375303/1817379):

SELECT post_id, meta_key 
FROM wp_postmeta, wp_categories 
WHERE wp_categories.id = 140 
    AND FIND_IN_SET(wp_postmeta.meta_value, wp_categories.member_ids) 
    AND wp_postmeta.meta_key ='bizid' 

另外,感谢@ sa289的线索:原来的子查询返回一个字符串,而不是一个列表, IN子句不会处理的东西。

回答

1

尝试自行运行子查询并查看返回的内容。

子查询有可能没有返回结果,或者返回的结果在子查询返回的member_ids的wp_postmeta表中没有meta_key'bizid'。

编辑:

或者如果wp_categories表中的列member_ids有任何给定行不止一个member_id,那么它将无法工作。如果是这种情况,请更改它,以便每行有一个member_id。

+0

嗯,子查询的作品,当我手动插入值我得到一个有效数量的结果。 – lintuxvi

+1

@lintuxvi我已更新我的答案,以包含新的可能性 – sa289

+0

member_ids * does *在列表中有多个值。谢谢你的提示!经过一番搜索,我遇到了这个突出的答案:http://stackoverflow.com/a/22375303/1817379。我仍然想知道为什么当子查询与IN子句一起使用时,列表成为问题。 – lintuxvi