2014-11-21 179 views
0

由一个行排序我有两个表,ticketsticket_updates两个表中从第二个表

有在ticket_updates多行按每一行在tickets

如何从tickets排序方式选择选择datetimeticket_updates

我想通过datetimeticket_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 
+0

研究'JOIN' – 2014-11-21 23:05:13

+0

检查更新:) – user3815283 2014-11-21 23:06:22

回答

2

你可以做这样的事情:

select t.* 
from tickets t 
order by (select min(datetime) from ticket_updates tu where tu.ticketid = t.ticketid); 

编辑:

您也可以尝试用group by

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_updates(ticketid, datetime)上的索引。

+0

这需要花费一些时间来运行查询 – user3815283 2014-11-22 21:58:27

0

我想你会想要这样的东西,这几乎是你编辑后张贴的东西。如果运行速度太慢,则可能需要运行查询的EXPLAIN并添加适当的索引。无论是日期时间,还是戈登建议的复合密钥,都可以用作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 
相关问题