mysql - 组合查询

标签 mysql

尝试节省一个步骤并组合这两个查询,但不确定如何最好地进行。基本上,第一个查询是获取我们系统中的评论列表,第二个查询是查看是否已发送通知(如果返回结果则表示已发送)。

获取评论:

SELECT r.*, 
    coalesce( ( SELECT AVG(rr.rating) 
                FROM `" . DBTABLEPREFIX . "reviews_ratings` rr 
                WHERE rr.review_id = r.id
              )
            , ''
            ) AS rating,
    FROM `" . DBTABLEPREFIX . "reviews` r
    WHERE BELOW SELECT IS 0 RESULTS

检查通知是否存在(是的,我知道这本身不起作用):

SELECT rn.* 
FROM `" . DBTABLEPREFIX . "reviews_notifications` rn 
WHERE rn.website_id = r.website_id 
  AND rn.post_id = r.post_id

关于如何正确执行此操作的任何想法?另外,如果您想知道为什么我们不能检查通知表上的 r.id,这是因为每天都会用新数据清除评论和评论评级表。稍后可能会重写该过程,以不杀死而仅添加新项目。

最佳答案

您可以使用相关子查询,使用 NOT EXISTS:

SELECT r.*, 
    coalesce( ( SELECT AVG(rr.rating) 
                FROM `" . DBTABLEPREFIX . "reviews_ratings` rr 
                WHERE rr.review_id = r.id
              )
            , ''
            ) AS rating,
    FROM `" . DBTABLEPREFIX . "reviews` r
    WHERE NOT EXISTS
          ( SELECT rn.* 
            FROM `" . DBTABLEPREFIX . "reviews_notifications` rn 
            WHERE rn.website_id = r.website_id 
              AND rn.post_id = r.post_id
          )

其他子查询可以移到FROM部分:

SELECT 
    r.*, 
    coalesce( rr.rating, '' ) AS rating,
FROM `" . DBTABLEPREFIX . "reviews` r
    LEFT JOIN
        ( SELECT
              rr.review_id, 
              AVG(rr.rating) AS rating
          FROM `" . DBTABLEPREFIX . "reviews_ratings` rr 
          GROUP BY rr.review_id
        ) AS rr
      ON rr.review_id = r.id     
WHERE NOT EXISTS
      ( SELECT rn.* 
        FROM `" . DBTABLEPREFIX . "reviews_notifications` rn 
        WHERE rn.website_id = r.website_id 
          AND rn.post_id = r.post_id
      )

关于mysql - 组合查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9034891/

相关文章:

javascript - 执行多个查询后终止 mysql 连接

php 即时搜索崩溃

java - SQL select 语句查看 JPA 存储的两个表中的项目

php - 获取请求超时 PDO 连接

php - 在子查询中使用联接?

mysql - 用户定义的数据收集帮助 ColdFusion

php - MySQL,从 $_SESSION ['username' 开始计数]

php - 通过第一个下拉菜单中的用户输入更改第二个下拉菜单中的选项

php - mysqli_query 在类中使用准备好的语句

php - php导出时设置格式为文本