Результаты группы SQL в виде массива столбцов - PullRequest
3 голосов
/ 14 апреля 2010

это вопрос 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' будет массивом, в котором перечислены все имена. Можно ли это сделать?

В данный момент я просто добавляю имена, и когда дата и номер стенограммы изменяются, я повторяю их ретроспективно, но я сделаю то же самое для файлов и выделенных сообщений, и это грязно.

Спасибо.

1 Ответ

4 голосов
/ 16 апреля 2010

Вы не можете иметь массив как поле 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
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...