php - 多加一张表查询统计数据SQL

标签 php mysql sql database

我尝试从4个表中选择数据(最后一个表需要统计数据)

我的 MySQL 表结构

用户

id
username

图片

id
user_id
image

用户关注

id
user_id
follow_id

评论

id
user_id
image_id
text

我有这个 SQL 查询:

    $sql = "SELECT u.username as user, i.image as user_image, p.image, p.date
            FROM users u              
            LEFT JOIN user_follow f ON u.id = f.follow_id
            LEFT JOIN images p ON p.user_id = u.id
            LEFT JOIN images i ON i.id = (SELECT b.id FROM images AS b where p.user_id = b.user_id ORDER BY b.id DESC LIMIT 1)
            WHERE f.user_id = 3 OR p.user_id = 3       
            ORDER BY p.date DESC";

这一行返回用户当前图像(最后一张图像)

 LEFT JOIN images i ON i.id = (SELECT b.id FROM images AS b where p.user_id = b.user_id ORDER BY b.id DESC LIMIT 1)

它返回我和我 friend 的所有图像

[0] => Array
    (
        [user] => 8888
        [user_image] => second.jpg
        [image] => second.jpg
        [date] => 2012-01-24 14:42:27
    )

[1] => Array
    (
        [user] => 8888
        [user_image] => second.jpg
        [image] => first.jpg
        [date] => 2012-01-24 14:42:27
    )

[2] => Array
    (
        [user] => 3333
        [user_image] => ax46l7v7vugnesk10whk_339.jpg
        [image] => ax46l7v7vugnesk10whk_339.jpg
        [date] => 2012-01-24 01:54:19
    )

[3] => Array
    (
        [user] => 3333
        [user_image] => ax46l7v7vugnesk10whk_339.jpg
        [image] => aaaaaaaa.jpg
        [date] => 2012-01-24 01:49:57
    )

我尝试添加

 left join commentaries c ON c.user_id = u.id

结果是

[2] => Array
    (
        [user] => 3333
        [user_image] => ax46l7v7vugnesk10whk_339.jpg
        [image] => ax46l7v7vugnesk10whk_339.jpg
        [date] => 2012-01-24 01:54:19
        [id] => 1
    )

[3] => Array
    (
        [user] => 3333
        [user_image] => ax46l7v7vugnesk10whk_339.jpg
        [image] => ax46l7v7vugnesk10whk_339.jpg
        [date] => 2012-01-24 01:54:19
        [id] => 2
    )

[4] => Array
    (
        [user] => 3333
        [user_image] => ax46l7v7vugnesk10whk_339.jpg
        [image] => aaaaaaaa.jpg
        [date] => 2012-01-24 01:49:57
        [id] => 1
    )

[5] => Array
    (
        [user] => 3333
        [user_image] => ax46l7v7vugnesk10whk_339.jpg
        [image] => aaaaaaaa.jpg
        [date] => 2012-01-24 01:49:57
        [id] => 2
    )

如果有评论则重复用户(顺便说一句 [user] => 3333 在示例中有 2 条评论)

我正在尝试再添加一个表“commentaries”并计算每张图片(来 self 和我的 friend )有多少条评论,如果没有这样的 $user_id 评论则返回 0

最佳答案

您需要使用 GROUP BY 来计算组中的行数(在您的例子中是对每张图片的评论)。这个查询应该可以解决问题:

SELECT u.username as user, i.image as user_image, p.image, p.date,
            COALESCE ( imgcount.cnt, 0 ) as comments
            FROM users u              
            LEFT JOIN user_follow f ON u.id = f.follow_id
            LEFT JOIN images p ON p.user_id = u.id
            LEFT JOIN images i ON i.id = (SELECT b.id FROM images AS b where p.user_id = b.user_id ORDER BY b.id DESC LIMIT 1)
            LEFT JOIN 
            ( SELECT image_id, COUNT(*) as cnt FROM
                 commentaries 
              GROUP BY image_id  ) imgcount
            ON p.id = imgcount.image_id
            WHERE f.user_id = 3 OR p.user_id = 3       
            ORDER BY p.date DESC

关于php - 多加一张表查询统计数据SQL,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8996741/

相关文章:

mysql - 使用 MySQL 数据库触发器

php - 具有特定日期的行数

php - 使用 PHP 从 mysql 加载文件

php - 需要帮助改进我的聊天系统

php - Uncaught Error : Call to undefined function mysql_connect() - each time I run my php file it shows me this error

sql - 将 session 变量传递到 asp :gridview's sqldatasource select command

php - Xampp 本地主机/仪表板

php - preg_replace : how to?

php - 根据条件从表中获取最后两个ID

sql - 有没有办法让NAnt捕获异常并运行回滚脚本?