Php 从两个表中选择所有行,从最后一个表中选择一行
我想从两个表中选择所有行,从最后一个表中选择一行 我的表格如下:Php 从两个表中选择所有行,从最后一个表中选择一行,php,mysql,Php,Mysql,我想从两个表中选择所有行,从最后一个表中选择一行 我的表格如下: tbl_order order_id order_no -------- -------- 1 1000 2 1001 3 1002 tbl_assign assign_id order_id central_status --------- -------- -------------- 1 1
tbl_order
order_id order_no
-------- --------
1 1000
2 1001
3 1002
tbl_assign
assign_id order_id central_status
--------- -------- --------------
1 1 1
2 2 1
3 3 1
tbl_unit_status
status_id assign_id status_status
--------- --------- -------------
1 1 Work
2 2 Cutter
3 2 Stitch
4 1 Stitch
从上面的3个表中,我想得到如下结果:
order_id order_no assign_id status_status
-------- -------- --------- -------------
3 1002 3 {null}
2 1001 2 Stitch
1 1000 1 Stitch
我试过下面的代码
选择*从tbl\u订单o左连接tbl\u在a上分配a.order\u id=o.order\u id左连接选择*从tbl\u单元状态u按u.status\u id描述订单限制uu上1个uu.assign\u id=a.assign\u id其中a.central\u status=1按a.assign\u id描述
但结果是
order_id order_no assign_id status_status
-------- -------- --------- -------------
3 1002 3 {null}
2 1001 2 {null}
1 1000 1 Stitch
我哪里做错了。我试了很多。请帮我找到答案。谢谢。像这样试试:
SELECT o.*,u2.assign_id,u2.status_status FROM tbl_order o
LEFT JOIN tbl_assign a ON a.order_id = o.order_id LEFT JOIN
(SELECT u.assign_id,max(u.status_id) as maxid FROM tbl_unit_status u group by u.assign_id)
uu ON uu.assign_id = a.assign_id
LEFT JOIN tbl_unit_status u2 on u2.status_id = uu.maxid
WHERE a.central_status = 1 ORDER BY a.assign_id DESC
试试这个
SELECT * FROM tbl_order o LEFT JOIN tbl_assign a ON a.order_id = o.order_id
LEFT JOIN (SELECT * FROM tbl_unit_status u ORDER BY u.status_id DESC LIMIT 2)
uu ON uu.assign_id = a.assign_id WHERE a.central_status = 1 ORDER BY
a.assign_id DESC
使用限制1时,您只能与tbl_unit_status中具有assign_id 1的最后一行进行比较。这是一个很好的尝试,但现在我得到了4行。我只需要3行,其中order_id不应重复。无法将限制设置为2,因为表行将动态更改。