簡體   English   中英

SQL組結果為列數組

[英]SQL group results as a column array

這是一個SQL問題,不知道使用哪種類型的JOIN,GROUP BY等,它是用於聊天程序,其中消息與房間相關,並且房間中的每一天都與成績單等相關聯。

基本上,在輸出我的成績單時,我需要顯示哪些用戶在該成績單上聊了聊。 目前我通過這樣的消息鏈接他們:

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'將是一個列出所有名字的數組。 可以這樣做嗎?

目前我只是追加名稱,當成績單日期和房間發生變化時,我會追溯回復它們,但我會對文件和突出顯示的消息做同樣的事情並且它很混亂。

謝謝。

您不能在結果中將數組作為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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM