簡體   English   中英

如何內部聯接三個表並獲得計數

[英]how to inner join three tables and get count

我有三個表:

members (id, name, surname, usr_img)

user_uploads (imgID, user_id, filename, description, up_time)

img_likes (likeID, img_id, user_id)

我需要從user_uploads中獲取所有信息,並使用img_id從成員中獲取上傳者信息,並在img_likes表中進行2個計數(檢查user_id(來自會話變量)和img_id是否存在,並獲得img的總贊數)。

SELECT user_uploads.* AS uu, members.*, COUNT(img_id, user_id) AS usr_liked, COUNT(img_id) AS total_likes
FROM user_uploads
INNER JOIN members AS m ON m.id = uu.user_id -- owner info
INNER JOIN img_likes AS il ON il.img_id = uu.imgID AND il.user_id = ? -- check if logged in user already liked
INNER JOIN img_likes AS ilt ON ilt.img_id = uu.imgID -- total likes
GROUP BY img_id, user_id
ORDER BY up_time DESC

我不需要從img_id中得到任何信息,只需計算行數即可。 我不知道是否需要內部聯接,也許要指定user_id?

並獲得計數:

$usr_liked = row['usr_liked'];
$total_likes = rwo['total_likes'];

那行得通嗎?

編輯:添加新查詢:

SELECT
    user_uploads.*,
    (
        SELECT *
        FROM members m
        WHERE m.id = user_uploads.user_id
    ),
    (
        SELECT COUNT(*)
        FROM img_likes t
        WHERE t.img_id = user_uploads.imgID AND t.user_id = ?
    ) AS user_likes,
    (
        SELECT COUNT(*)
        FROM img_likes t
        WHERE t.img_id = user_uploads.imgID
    ) AS total_likes
FROM user_uploads
ORDER BY up_time DESC

您可以使用子查詢:

SELECT 
    uu.*, 
    m.*,
    (
        SELECT COUNT(t.*)
        FROM img_likes t
        WHERE t.img_id = uu.imgID AND t.user_id = ?
    ) AS user_likes,
    (
        SELECT COUNT(t.*)
        FROM img_likes t
        WHERE t.img_id = uu.imgID 
    ) AS total_likes
FROM 
    user_uploads AS uu
    INNER JOIN members AS m ON 
        m.id = uu.user_id
ORDER BY
    uu.up_time DESC

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM