Php MYSQL-两个表为每个用户从第二个表最后跟踪的行中获取记录
我有两张桌子 表A有Php MYSQL-两个表为每个用户从第二个表最后跟踪的行中获取记录,php,mysql,Php,Mysql,我有两张桌子 表A有usr\u id、usr\u名称、usr\u状态[1或0] 表B有id、usr\u id、跟踪日期[每个用户可以跟踪多个时间] 需要获取每个用户的最后一条信息,其状态为usr\u status=1 如何通过MySQL查询实现 试着像: SELECT * FROM tableb b LEFT JOIN tablea a ON a.usr_id = b.usr_id GROUP BY a.usr_id 请给出建议? 在派生表中,为每个u
usr\u id、usr\u名称、usr\u状态[1或0]
表B有id、usr\u id、跟踪日期[每个用户可以跟踪多个时间]
需要获取每个用户的最后一条信息,其状态为usr\u status=1
如何通过MySQL查询实现
试着像:
SELECT
*
FROM
tableb b
LEFT JOIN
tablea a ON a.usr_id = b.usr_id
GROUP BY a.usr_id
请给出建议?- 在派生表中,为每个
usr\u id
- 将此结果集连接回主表,以获得相应的行
在MySQL版本(8.0.2及以上)中,我们可以使用。使用
Row\u Number()
我们可以在usr\u id
分区中将tracked\u date
值最高的行的行号设置为1。现在,我们可以使用它作为派生表,只考虑行数等于1的那些行。< /P>
SELECT
dt.*
FROM
(
SELECT
ta.*,
tb.*,
ROW_NUMBER() OVER (PARTITION BY ta.usr_id
ORDER BY tb.tracked_date DESC) AS row_no
FROM
tablea AS ta
JOIN tableb AS tb ON tb.usr_id = ta.usr_id
WHERE ta.usr_status = 1
) AS dt
WHERE dt.row_no = 1
附加:如果您希望获得所有用户(
status=1
),但还没有tracked\u date
条目;直接的左联接在表和派生表之间不起作用
我们必须首先在一个单独的派生表中获得对应于最大跟踪日期
的完整行;然后从用户表中执行左联接
,以获取所有用户
SELECT
ta.*, dt2.*
FROM
tablea AS ta
LEFT JOIN
(SELECT tb.*,
dt.max_tracked_date
FROM tableb AS tb
JOIN (
SELECT
usr_id,
MAX(tracked_date) AS max_tracked_date
FROM tableb
GROUP BY usr_id
) AS dt
ON (dt.usr_id = tb.usr_id AND
dt.max_tracked_date = tb.tracked_date)
) AS dt2 ON ta.usr_id = dt2.usr_id
WHERE ta.usr_status = 1
结果
| usr_id | usr_name | usr_status | id | usr_id | stage | tracked_date | max_tracked_date |
| ------ | -------- | ---------- | --- | ------ | ----- | ------------------- | ------------------- |
| 1 | john | 1 | 2 | 1 | 2 | 2018-11-12 13:12:12 | 2018-11-12 13:12:12 |
| 2 | dave | 1 | 3 | 2 | 1 | 2018-11-12 13:12:12 | 2018-11-12 13:12:12 |
| 3 | smith | 1 | | | | | |
@vignesh.D很乐意提供帮助:)顺便说一句,如果您可以使用MySQL 8.0.2及更高版本,那么使用窗口函数进行的详细查询就更少了。好的。。谢谢:)工作正常,但它不会显示没有曲目的用户,也需要显示没有曲目的用户list@vignesh.D将所有internal JOIN
更改为LEFT JOIN
以获取用户(即使没有曲目列表)。已尝试,但结果仍然相同@madhur
| usr_id | usr_name | usr_status | id | usr_id | stage | tracked_date | max_tracked_date |
| ------ | -------- | ---------- | --- | ------ | ----- | ------------------- | ------------------- |
| 1 | john | 1 | 2 | 1 | 2 | 2018-11-12 13:12:12 | 2018-11-12 13:12:12 |
| 2 | dave | 1 | 3 | 2 | 1 | 2018-11-12 13:12:12 | 2018-11-12 13:12:12 |
| 3 | smith | 1 | | | | | |