php - 如何内连接三个表并获取计数

标签 php mysql

我有三个表:

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(来自 session 变量)和 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

关于php - 如何内连接三个表并获取计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26572784/

相关文章:

php - MySQL - 重命名列

php - 将 setTimeout 与 AJAX 一起使用的替代方案?

java - 选择多行

mysql - 当大数据在 where 条件下受到影响时,索引不起作用

php - 如何在数据库表中自动生成的字段值中添加前缀?

PHP 5 SSH2 函数

php - 如何递归地从多维数组中的每个值中删除周围的空格

asp.net - 所有数据都不适合数据 GridView

php - 用于连续检查 MYSQL 数据库的 Web Worker AJAX 或 Web 套接字?

php - 检索 productcode 字段的最后一个 id 值