Php mysql使用最后的多个group by和where类连接4个表

Php mysql使用最后的多个group by和where类连接4个表,php,mysql,Php,Mysql,我有向客户交付物品的数据库。为此,我有4个表,交付日志、交付、驱动程序、客户 (我们有交货日志表,因为有时一次交货有许多条目,如未交货和其他司机提货等) 现在我想问一下 交货日志中的最后1条记录(按日期添加的订单) 对于每个驾驶员的每次交付 交货地点=完成 我想要贝娄场 delivery_log.delivery_id delivery_log.driver_id delivery_log.message date_added delivery.name driver.name custo

我有向客户交付物品的数据库。为此,我有4个表,交付日志、交付、驱动程序、客户

(我们有交货日志表,因为有时一次交货有许多条目,如未交货和其他司机提货等)

现在我想问一下

交货日志中的最后1条记录(按日期添加的订单)

对于每个驾驶员的每次交付

交货地点=完成

我想要贝娄场

delivery_log.delivery_id  delivery_log.driver_id delivery_log.message date_added 
delivery.name driver.name 
customer.first_name customer.last_name
我尝试了许多内部连接和连接选项,但似乎没有任何效果,有一段时间它没有使用最后一个记录&有一段时间它混合了(错误的)交付或驱动程序名称


谢谢您的帮助。

您可以使用
不存在()
加入

SELECT 
    dl.*,
    del.name,
    dr.name,
    c.first_name,
    c.last_name
FROM delivery_log dl
JOIN delivery del 
 ON(dl.delivery_id = del.delivery_id)
JOIN driver dr 
 ON(dr.driver_id = dl.driver_id)
JOIN customer c 
 ON(del.customer_id = c.customer_id)
WHERE del.status IN('DONE','OK')
  AND NOT EXISTS(SELECT 1 FROM delivery_log s
                 WHERE s.delivery_id = dl.delivery_id
                   AND s.driver_id = dl.driver_id
                   AND s.date_added > dl.date_added)

您必须使用左外联接。@请您解释一下,好吗?例如,请给我一秒钟时间,我会将查询更新到一个答案框中。这种情况称为输入错误。你应该自己修理。“错”是个大字,怎么了@史先生,对不起,这个词错了。你能告诉我,我怎样才能把两种状态,比如del.status='DONE'或dl.status='OK'放在哪里,我正在这样做,但是在放了or运算符之后,我得到了所有的记录@sagi,把它们放在括号里:
WHERE(del.status='DONE'或del.status='OK')和…
,或者(或者更好的)用()
->
WHERE del.status IN('OK','DONE')
@Mr.SHSure,还有一件事,如果我想在WHERE class for delivery\u log ID>2@sagi中添加它<代码>和交付\u log.id>2
<代码>其中只能提及一次,每次您要添加一个条件时,
都是必需的@施先生
SELECT 
    dl.*,
    del.name,
    dr.name,
    c.first_name,
    c.last_name
FROM delivery_log dl
JOIN delivery del 
 ON(dl.delivery_id = del.delivery_id)
JOIN driver dr 
 ON(dr.driver_id = dl.driver_id)
JOIN customer c 
 ON(del.customer_id = c.customer_id)
WHERE del.status IN('DONE','OK')
  AND NOT EXISTS(SELECT 1 FROM delivery_log s
                 WHERE s.delivery_id = dl.delivery_id
                   AND s.driver_id = dl.driver_id
                   AND s.date_added > dl.date_added)