mysql - 在不使用子查询或发送额外查询的情况下获取所有找到的行的计数?

标签 mysql sql

这是我更大的主查询的子查询:

SELECT DISTINCT p1.item_id
 FROM pages_likes AS p1
   JOIN pages_likes AS p2 ON p1.item_id = p2.item_id AND p1.status = p2.status
 WHERE p1.uid = 855 AND p2.uid = 1091
 GROUP BY p1.id

这给了我这个结果,例如:

item_id

32

38

73

所以我需要获得的预期计数值为 3。

我需要知道我是否可以在不使用子查询(不使用外部SUM())并且不发送额外的mysql-的情况下获取这些找到的行查询(不使用SELECT FOUND_ROWS())。

这是因为我无法将主列的值/列放置在主查询中所需的子查询子查询中。那么,有什么方法可以让这个查询通过单个查询计算所有找到的行吗?

我的主要查询是这样的:

SELECT SQL_CALC_FOUND_ROWS DISTINCT l1.item_id, l1.uid, l2.id, l2.uid, u.prename, l1.item_id, l2.item_id,
  (SELECT SUM(cnt) FROM
  (
    SELECT DISTINCT p1.item_id
    FROM pages_likes AS p1
      JOIN pages_likes AS p2 ON p1.item_id = p2.item_id AND p1.status = p2.status
    WHERE p1.uid = 855 AND p2.uid = 1091
    GROUP BY p1.id
  ) AS t) AS total

FROM pages_likes l1 
  JOIN users u on u.id = l1.uid 
  JOIN pages_likes l2 on l1.item_id = l2.item_id 
  JOIN users_likes ul on l1.uid = ul.uid 
WHERE ul.date >= DATE_SUB(NOW(),INTERVAL 1 WEEK) 
      AND l1.uid != 1091 AND l2.uid = 1091 
      AND (l1.status = 1 AND l2.status = 1) 
      AND u.gender = 2 
GROUP BY l1.uid 
ORDER BY 
  total DESC,
  l1.uid DESC, 
  l1.date DESC

我的目标是在主查询的子查询中使用 l1.uid 而不是 855

表结构:http://sqlfiddle.com/#!9/b1334

最佳答案

如果我理解正确,只需使用这个子查询:

(SELECT COUNT(DISTINCT p1.item_id)
 FROM pages_likes p1 JOIN
      pages_likes p2
      ON p1.item_id = p2.item_id AND p1.status = p2.status
 WHERE p1.uid = 855 AND p2.uid = 1091
)

关于mysql - 在不使用子查询或发送额外查询的情况下获取所有找到的行的计数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42224900/

相关文章:

php - MySQL 准备语句失败

MySQL 批量插入几何字段

php - mysql - 查明输入是否存在于最后 30 条记录中

mysql - mysql中结果集的情况

mysql - 手动编写具有 has_many 关系的 SQL 查询

php - echo数组数据将所有文本转为小写

java - 如果 select 语句包含 DATE 类型的列,则聚合 SQL 查询不起作用

php - Mysql 将资源 #16 插入数据库表

python - mysqldb-python 并没有真正更新原始数据库

php - MySql 查询省略了最后记录的行