[英]Count from multiple tables
我試圖計算多個表的結果。 我有圖片和圖片有評論,喜歡和不喜歡。 我想在一個表查詢中合並所有這些我將顯示所有照片並計算喜歡,評論,不喜歡該照片。
我的照片表看起來像這樣:
photo_id owner_id album_id image_type photo_name photo_ext photo_size photo_type photo_description date_uploaded date_midified photo_guid bg_x_position bg_y_position
-------- -------- -------- ---------- ------------------------------------ --------- ---------- ---------- ----------------- ------------------- ------------------- ------------------------------------ ------------- ---------------
2 1 5 0 27bda14cb0e30efb0eeef5688e6c0ef9.jpg .jpg 42.6 jpeg (NULL) 2016-02-09 15:45:20 2016-02-09 15:45:20 E8CFF5F0-F8FA-8AD7-E3B5-63EAFE81E1B6 (NULL) (NULL)
3 1 5 0 8077f0d2104c35c8e612e24834f82ace.jpg .jpg 34.52 jpeg (NULL) 2016-02-09 15:49:44 2016-02-09 15:49:44 09B25F5C-0A9D-0EBC-DCE9-EE24E8ED4B6D (NULL) (NULL)
4 1 5 0 6c28b264470e7a7f2829ea5b7290cbba.jpg .jpg 85.65 jpeg (NULL) 2016-02-09 15:49:56 2016-02-09 15:49:56 9A5EF85E-F691-F42E-C20C-BCDC765BFA1B (NULL) (NULL)
像表:
like_id item_id account_id rate time host
------- ------- ---------- ------ ------------------- --------
308 2 1 1 2016-03-18 13:45:16 (NULL)
309 3 1 2 2016-03-18 13:45:33 (NULL)
310 2 7 1 2016-03-18 14:23:49 (NULL)
評論表:
comment_id item_id content account_id time
------- ------- ---------- ------------ -------------------
308 262 Test comment 1 2016-03-18 13:45:16
所以我想要的結果是這樣的:
photo_id owner_id album_id image_type photo_name photo_ext photo_size photo_type photo_description date_uploaded date_midified photo_guid bg_x_position bg_y_position likes dislikes comments
-------- -------- -------- ---------- ------------------------------- --------- ---------- ---------- ----------------- ------------------- ------------------- ---- ------ ------ ------------------------------------ ------------- --------------
所以在現有的表格中我想添加3個新單元格(喜歡,不喜歡和評論)。 我的查詢工作很好,但評論數量不正確因為他顯示所有圖片都有1
評論,但沒有評論。
SELECT * FROM (SELECT p.photo_id, p.photo_name,
IFNULL(SUM(l.rate = 1), 0) AS likes,
IFNULL(SUM(l.rate = 2), 0) AS dislikes
FROM pb_account_photos AS p
LEFT JOIN pb_account_likes AS l ON l.item_id = p.photo_id
WHERE p.owner_id = 1 GROUP BY p.photo_id) AS LIKES,
(SELECT COUNT(*) AS comments, p.photo_id
FROM pb_account_photos AS p
LEFT JOIN pb_account_comments AS c ON c.item_id = p.photo_id
WHERE p.owner_id = 1 GROUP BY p.photo_id) AS COMM WHERE COMM.photo_id=LIKES.photo_id;
問題是你在LEFT JOIN
之后計算。 在這種情況下, COUNT(*)
始終返回至少為1的值,因為它正在計算行數。 您需要計算匹配項,因此計算第二個表中的列:
SELECT likes.*, comm.comments
FROM (SELECT p.photo_id, p.photo_name,
COALESCE(SUM(l.rate = 1), 0) AS likes,
COALESCE(SUM(l.rate = 2), 0) AS dislikes
FROM pb_account_photos p LEFT JOIN
pb_account_likes l
ON l.item_id = p.photo_id
WHERE p.owner_id = 1
GROUP BY p.photo_id
) likes JOIN
(SELECT COUNT(C.item_id) AS comments, p.photo_id
FROM pb_account_photos p LEFT JOIN
pb_account_comments c
ON c.item_id = p.photo_id
WHERE p.owner_id = 1
GROUP BY p.photo_id
) comm
ON comm.photo_id = likes.photo_id;
SELECT p.*,
SUM(l.rate = 1) AS likes
SUM(l.rate = 2) AS dislikes
SUM(IF(ISNULL(c.item_id), 0, 1)) AS comments
FROM pb_account_photos p
LEFT JOIN pb_account_likes AS l ON l.item_id = p.photo_id
LEFT JOIN pb_account_comments AS c ON c.item_id = p.photo_id
GROUP BY p.photo_id
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.