2010-04-14 102 views
3

這是一個SQL問題,不知道要使用哪種類型的JOIN,GROUP BY等,它是用於消息與房間相關的聊天程序,以及房間中的每一天鏈接到成績單等作爲列數組的SQL組結果

基本上,當輸出我的成績單時,我需要顯示哪些用戶在該成績單上聊過。目前,我將它們鏈接通過郵件,像這樣:

SELECT rooms.id, rooms.name, niceDate, room_transcripts.date, long 
FROM room_transcripts 
    JOIN rooms ON room_transcripts.room=rooms.id 
    JOIN transcript_users ON transcript_users.room=rooms.id AND transcript_users.date=room_transcripts.date 
    JOIN users ON transcript_users.user=users.id 
WHERE room_transcripts.deleted=0 AND rooms.id IN (1,2) 
ORDER BY room_transcripts.id DESC, long ASC 

結果集是這樣的:

Array 
(
    [0] => Array 
     (
      [id] => 2 
      [name] => Room 2 
      [niceDate] => Wednesday, April 14 
      [date] => 2010-04-14 
      [long] => Jerry Seinfeld 
     ) 

    [1] => Array 
     (
      [id] => 1 
      [name] => Room 1 
      [niceDate] => Wednesday, April 14 
      [date] => 2010-04-14 
      [long] => Jerry Seinfeld 
     ) 

    [2] => Array 
     (
      [id] => 1 
      [name] => Room 1 
      [niceDate] => Wednesday, April 14 
      [date] => 2010-04-14 
      [long] => Test Users 
     ) 

) 

我想盡管對陣列中的每個元素代表一個腳本條目和將用戶分組到數組中作爲條目的元素。所以'long'將是一個列出所有名字的數組。這可以做到嗎?

目前我只是追加名稱,當記錄日期和房間變化時,我會回顧他們,但我會對文件和突出顯示的消息執行相同的操作,並且這很麻煩。

謝謝。

+0

由於關係模型的結構,此任務最好在PHP中進行後查詢處理。 – outis 2010-04-16 09:32:54

回答

4

由於每個數組元素表示表中的一行,因此在結果中不能有數組作爲long字段。但是,您可以使用拼接字符串,並在需要時拆分字符串。該查詢將如下所示:

SELECT rooms.id, rooms.name, niceDate, room_transcripts.date, group_concat(long) as long 
FROM room_transcripts 
    JOIN rooms ON room_transcripts.room=rooms.id 
    JOIN transcript_users ON transcript_users.room=rooms.id AND transcript_users.date=room_transcripts.date 
    JOIN users ON transcript_users.user=users.id 
WHERE room_transcripts.deleted=0 AND rooms.id IN (1,2) 
GROUP BY room_transcripts.id 
ORDER BY room_transcripts.id DESC