Php 从两个表中选择,按第二个表中的一行排序
我有两张桌子,Php 从两个表中选择,按第二个表中的一行排序,php,sql,Php,Sql,我有两张桌子,tickets和ticket\u updates tickets\u updates中的每一行都有多行tickets 如何在ticket\u updates 我想从最早的datetime开始,在ticket\u updates中按datetime订购(DESC) 我认为以下方法可能有效,但是在PHPMyAdmin中运行时间太长,并且出现了一个内部服务器错误: SELECT t.ticketnumber, t.subject, t.contact_name FROM tickets
tickets
和ticket\u updates
tickets\u updates
中的每一行都有多行tickets
如何在ticket\u updates
我想从最早的datetime
开始,在ticket\u updates
中按datetime
订购(DESC)
我认为以下方法可能有效,但是在PHPMyAdmin中运行时间太长,并且出现了一个内部服务器错误:
SELECT t.ticketnumber, t.subject, t.contact_name FROM tickets t JOIN ticket_updates tu on t.ticketnumber = tu.ticketnumber group by tu.ticketnumber order by tu.datetime DESC
你可以这样做:
select t.*
from tickets t
order by (select min(datetime) from ticket_updates tu where tu.ticketid = t.ticketid);
编辑:
您也可以尝试使用分组方式
:
select t.*
from tickets t join
(select ticketid, min(datetime) as mindt
from ticket_updates tu
group by ticketid
) tu
on tu.ticketid = t.ticketid
group by tu.mindt desc;
或者,原始查询可以利用
ticket\u更新(ticketid,datetime)
上的索引,我想您可能会想要这样的内容,这与编辑后发布的内容差不多。如果运行太慢,您可能需要对查询运行解释并添加适当的索引。可以是datetime,也可以是Gordon建议的ticketnumber/datetime的复合键
SELECT t.ticketnumber, t.subject, t.contact_name FROM ticket_updates tu
INNER JOIN tickets t ON t.ticketnumber = tu.ticketnumber
GROUP BY tu.ticketnumber
ORDER BY tu.datetime DESC
或
运行查询需要一段时间
SELECT t.ticketnumber, t.subject, t.contact_name FROM ticket_updates tu
INNER JOIN tickets t using(ticketnumber)
GROUP BY tu.ticketnumber
ORDER BY tu.datetime DESC