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我在帖子的任何地方都没有看到您的数据库结构,我只是重新阅读了它。更新了查询以匹配您的数据库结构,虽然不知道您的列是如何使用的,但这仍然只是一个猜测。您可能需要自己做一些工作才能使此示例适合您的情况。同样的问题是,它不会过滤当月的照片,而是重新运行所有照片!复制品