【问题标题】:SQL query with special conditions not working具有特殊条件的 SQL 查询不起作用
【发布时间】:2014-03-21 19:17:17
【问题描述】:

请帮我处理我的 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:请帮忙,我很困惑:(

【问题讨论】:

    标签: php mysql sql wordpress


    【解决方案1】:

    同时列可以等于一个值meta.meta_key = 'expiration_date'meta.meta_key = 'rating_count' 怎么可能同时列可以有这两个值,我猜你在帖子和他们的元之间有一对多的关系你需要另一个加入您的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
    

    【讨论】:

    【解决方案2】:

    我猜“rating_count”是指你之前创建的别名。

    试试看:

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

    【讨论】:

      猜你喜欢
      • 2021-07-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多