Php MYSQL-连接三个表
我有这个数据库:Php MYSQL-连接三个表,php,mysql,join,Php,Mysql,Join,我有这个数据库: Image : id,user_id,[..],created_at Visit : id,image_id,created_at user : id,[..] 我有一个查询来获取最优秀的上传用户 $current_month = date('Y-m-d', strtotime("first day of this month")) . ' 23:59:59'; $users = DB::query("SELECT * , COUNT(p.id) as numPi
Image : id,user_id,[..],created_at
Visit : id,image_id,created_at
user : id,[..]
我有一个查询来获取最优秀的上传用户
$current_month = date('Y-m-d', strtotime("first day of this month")) . ' 23:59:59';
$users = DB::query("SELECT * ,
COUNT(p.id) as numPics
FROM
images p
INNER JOIN
users u
ON
p.user_id = u.id
WHERE
p.created_at >= \"$current_month\"
GROUP BY p.user_id
ORDER BY numPics DESC LIMIT 10");
我要做的是加入访问表,这样我就可以得到当月每个图像的总访问量。在不知道您的访问表结构的情况下,我无法给出具体细节,但您应该能够在用户的
加入后为访问添加加入子句:
SELECT *, COUNT(p.id) as numPics, COUNT(v.id) as numVisits
FROM images p
INNER JOIN users u ON p.user_id = u.id
LEFT JOIN visits v ON v.image_id = p.id AND v.created_at >= "$current_month"
WHERE p.created_at >= "$current_month"
GROUP BY p.user_id
ORDER BY numPics DESC LIMIT 10
假设访问表上有一个image_id字段:
SELECT * ,
COUNT(p.id) as numPics
FROM
images p
INNER JOIN
users u
ON
p.user_id = u.id
INNER JOIN visits as v ON v.image_id = p.id
WHERE
p.created_at >= \"$current_month\"
GROUP BY p.user_id
ORDER BY numPics DESC LIMIT 10"
特别是where子句,它不起作用!是的,正如我所指出的,在不知道访问表的结构的情况下,我只能猜测列名和类型是什么。您必须修改示例以适应您的情况。亲爱的,我发布了我的数据库结构,您可以重新阅读该问题。@Hamza我在帖子的任何地方都没有看到您的数据库结构,我只是重新阅读了它。更新了查询以匹配您的数据库结构,虽然不知道您的列是如何使用的,但这仍然只是一个猜测。您可能需要自己做一些工作才能使此示例适合您的情况。同样的问题是,它不会过滤当月的照片,而是重新运行所有照片!复制品