具有特殊条件的SQL查询无效

时间:2014-03-21 10:53:20

标签: php mysql sql wordpress

请帮我查询我的MySQL查询。

基本上我想为用户排名系统检索一些用户。我的项目基于wordpress安装。但由于我的查询非常具体,所有的wordpress方法和函数都是无用的。 我尝试用文字描述我的查询:

“给我所有用户,每个帖子至少有三个帖子,每个帖子的最低评分为4分。此外,每个帖子的帖子都需要至少有5个评分。”

(查询中的日期条件不重要,工作正常)

为了存储数据,帖子照常保存在wp_posts(特殊post_type)中。每个帖子的评级数量都使用元值(key = rating_count)存储。每个评级都存储在表“wp_rating”(id,post_id,rating,user_id)中。

我的查询如下所示:

SELECT SUM(r.rating) AS rating,
p.post_author AS user_id,
COUNT(r.rating) AS rating_count
FROM wp_rating r 
INNER JOIN wp_posts p ON p.ID = r.post_id 
INNER JOIN wp_postmeta meta ON meta.post_id = p.ID 
WHERE p.post_status = 'publish' 
AND (meta.meta_key = 'expiration_date' 
AND meta.meta_value < DATE_FORMAT(NOW(), 'Ymd'))
AND (meta.meta_key = 'rating_count' AND meta.meta_value > 4)
AND MONTH(p.post_date) = 03 
AND r.rating > 4 
GROUP BY p.post_author 
HAVING COUNT(p.ID) > 3 
ORDER BY SUM(r.rating) DESC

问题在于以下几行:

AND (meta.meta_key = 'rating_count' AND meta.meta_value > 4)

解雇此查询后,我没有得到任何结果。 (我检查了所有帖子两次以获得足够的评分)

我希望我的描述可以找到解决方案。

亲切的问候, 罗宾: - )

PS:请帮忙,我很困惑:(

2 个答案:

答案 0 :(得分:0)

同时列可以等于一个值meta.meta_key = 'expiration_date'meta.meta_key = 'rating_count'如何有可能同时列可以有这两个值,我想你之间有一对多的关系和你的meta你需要另一个加入你的wp_postmeta表来满足你的第二个条件,并确保你在这里比较日期类型meta.meta_value它闻起来像你有meta.meta_value的文本类型柱

SELECT SUM(r.rating) AS rating,
p.post_author AS user_id,
COUNT(r.rating) AS rating_count
FROM wp_rating r 
INNER JOIN wp_posts p ON p.ID = r.post_id 
INNER JOIN wp_postmeta meta ON meta.post_id = p.ID 
INNER JOIN wp_postmeta meta1 ON meta1.post_id = p.ID 
WHERE p.post_status = 'publish' 
AND (meta.meta_key = 'expiration_date' 
AND meta.meta_value < DATE_FORMAT(NOW(), 'Ymd'))
AND (meta1.meta_key = 'rating_count' AND meta1.meta_value > 4)
AND MONTH(p.post_date) = 03 
AND r.rating > 4 
GROUP BY p.post_author 
HAVING COUNT(p.ID) > 3 
ORDER BY SUM(r.rating) DESC

答案 1 :(得分:0)

我想&#39; rating_count&#39;你的意思是你之前创造的别名。

试试:

 AND (meta.meta_key = COUNT(r.rating) AND meta.meta_value > 4)