这是我的情况:
我有 2 个表,tickets 和 tickets-details。我需要检索 "tickets" 中的信息以及 "tickets-details" 对每张票的最后回复,然后在表格中显示它们。我的问题是 "ticket-details" 每次回复都会返回一行,而我每张票得到的不止一行。如何在单个查询中实现此目的?
我尝试将 DISTINCT
添加到我的 SELECT
但没有。
我尝试使用 GROUP BY
id_ticket 但没有成功,因为我没有从工单详细信息中得到最后回复
这是我的查询:
SELECT DISTINCT ti.id_ticket,ti.title,tiD.Reply,ti.status
FROM tickets ti
INNER JOIN ticket-details tiD ON ti.id_ticket = tiD.id_ticket
WHERE user = '$id_user' ORDER BY status desc
-------------------------------- 编辑------------ ------------------------------------
我的表:
门票(id_ticket,用户,日期,标题,状态)
工单详情(id_ticketDetail, id_ticket, dateReply, reply)
最佳答案
假设最大id_ticketDetail
代表ticket-details
中的最新记录你可以试试
SELECT ti.id_ticket,
ti.title,
tiD.Reply,
ti.status
FROM tickets ti JOIN
(
SELECT id_ticket, reply
FROM `ticket-details` d JOIN
(
SELECT MAX(id_ticketDetail) max_id
FROM `ticket-details`
GROUP BY id_ticket
) q ON d.id_ticketDetail = q.max_id
) tiD ON ti.id_ticket = tiD.id_ticket
WHERE ti.user = '$id_user'
ORDER BY ti.status DESC
或具有最大 dateReply
SELECT ti.id_ticket,
ti.title,
tiD.Reply,
ti.status
FROM tickets ti JOIN
(
SELECT d.id_ticket, d.reply
FROM `ticket-details` d JOIN
(
SELECT id_ticket, MAX(dateReply) max_dateReply
FROM `ticket-details`
GROUP BY id_ticket
) q ON d.id_ticket = q.id_ticket
AND d.dateReply = q.max_dateReply
) tiD ON ti.id_ticket = tiD.id_ticket
WHERE ti.user = '$id_user'
ORDER BY ti.status DESC
这是 SQLFiddle 两个查询的演示。
关于mysql - SQL INNER JOIN 返回的行比我需要的多,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17533883/