我想在我的网络应用上改进我的搜索方法。
我有一个小票务系统。每个故障单都有一个自己的数据库条目(表:tickets
)。每张票可以有多条消息(表:tickets_messages
)。每条消息都可以通过多种方式发送(表格:messages
,tickets_messages_mapping
)。
例如:
ID 4
的故障单包含2条消息(IDs: 1 and 2
)。这些邮件已由email
和sms
发送。
现在我们得到了以下布局(请参阅此链接以获取SQL小提琴http://sqlfiddle.com/#!9/07891):
tickets:
ID: 4
date: 2015-09-18
tickets_messages:
ID: 1
--------
ID: 2
tickets_messages_mapping:
ID: 5
TICKETMESSAGEID: 1
MESSAGEID: 15
--------
ID: 6
TICKETMESSAGEID: 2
MESSAGEID: 16
messages:
ID: 15
CONTENT: Hello
FROM: John Doe
TO: ME
GATEWAY: SMS
--------
ID: 16
CONTENT: World
FROM: JOHN DOE
TO: ME
GATEWAY: EMAIL
现在我想创建一个搜索词,在那里我可以搜索票证日期(作品),票证ID(作品)和票证内容(不起作用):
这是我第一次尝试获取所有信息并使其可搜索:
SELECT DISTINCT a.ticketid, GROUP_CONCAT(tm.id) as messageid, GROUP_CONCAT(tmm.messageid) as ticketmessageid, GROUP_CONCAT(mess.content)
FROM `dia9__speedball_tickets` AS a
LEFT JOIN dia9__speedball_tickets_messages as tm ON tm.ticketid = a.id
LEFT JOIN dia9__speedball_tickets_messages_mapping as tmm ON tmm.ticketmessageid = tm.id
LEFT JOIN dia9__speedball_messages as mess ON tmm.ticketmessageid = mess.id
GROUP BY a.id
我希望得到的结果是分配给此ticket-id的消息列表,可能用逗号分隔。事实上我想获得如下行:ticketid,title,date,content ticketid:1 title:测试日期:2015-09-18内容:Message1,Message2,Message3
有什么想法在mysql中解决这个问题吗?