Ниже приведен мой запрос в sql, связанный с count, и я хочу ожидаемый результат - PullRequest
0 голосов
/ 10 апреля 2019

Я написал этот запрос, который предоставляет мне общее количество конкретной песни из таблицы playlist_details.(Пример: давайте рассмотрим, что название песни - «XYZ», и в таблице playlist_details есть три записи с тремя разными датами, поэтому мой запрос показывает вывод в виде «count 3». Теперь я хочу раздвоить этот запрос так, чтобы янужен еще один столбец рядом с этим столбцом подсчета, который показывает три даты, когда песня xyz повторяется в таблице, и из-за этого я получил счет как 3.

SELECT
playlist_details.`EPISODE_TITLE` AS SongName,
songs_master.`ASSET_ID`,
song_rights_master.`CHANNEL_IDS` AS VChannels,
channel_master.`PLAYLIST_EXPORT_FILE_NAME`,
playlist_details.`DURATION`,
Count(*) AS Count,
programmes_master.`TITLE` as moviename,
songs_master.`SONG_TYPE`
FROM
playlist_details
INNER JOIN songs_master ON playlist_details.`ASSET_ID` = songs_master.`ASSET_ID`
INNER JOIN song_rights_master ON song_rights_master.`SONG_ID` = songs_master.`SONG_ID`
INNER JOIN channel_master ON channel_master.`CHANNEL_ID` = song_rights_master.`CHANNEL_IDS`
LEFT JOIN programmes_master ON songs_master.`PROGRAMME_ID` = programmes_master.`PROGRAMME_ID`
WHERE playlist_details.`EVENT_TYPE` = 'Song' AND
song_rights_master.`songs_agreements_master_id`='".$agreement."'
GROUP BY SongName

Текущий вывод:

+------------------------+
| SongName AssetID Total |
+------------------------+
| XYZ      000000  3     |
+------------------------+

Ожидаемый результат:

+-------------------------------------+
| SongName AssetID ScheduleDate Total |
+-------------------------------------+
| XYZ      000000  13-09-2019   3     |
|                  14-09-2019         |
|                  15-09-2019         |
+-------------------------------------+

1 Ответ

0 голосов
/ 10 апреля 2019

Я на самом деле не знаю формат ожидаемого вывода, вам, кажется, нужны дополнительные строки результатов с только датой внутри?Будет сложно связать их с вашей песней, если у вас будет более одного результата. Я предлагаю решение, которое будет выводить даты в уникальных строках в виде строки, разделенной запятыми, для каждого результата, например:

+-----------------------------------------------------------+
| SongName AssetID ScheduleDate                       Total |
+-----------------------------------------------------------+
| XYZ      000000  13-09-2019,14-09-2019,15-09-2019   3     |
+-----------------------------------------------------------+

Для этого вы можете использовать GROUP_CONCAT, который объединит значения, сгруппированные с GROUP BY (при условии, что поле имеет имя ScheduleDate в вашей БД):

SELECT
playlist_details.`EPISODE_TITLE` AS SongName,
songs_master.`ASSET_ID`,
song_rights_master.`CHANNEL_IDS` AS VChannels,
channel_master.`PLAYLIST_EXPORT_FILE_NAME`,
playlist_details.`DURATION`,
Count(*) AS Count,
GROUP_CONCAT(playlist_details.`ScheduleDate`) as ScheduleDate,
programmes_master.`TITLE` as moviename,
songs_master.`SONG_TYPE`
FROM
playlist_details
INNER JOIN songs_master ON playlist_details.`ASSET_ID` = songs_master.`ASSET_ID`
INNER JOIN song_rights_master ON song_rights_master.`SONG_ID` = songs_master.`SONG_ID`
INNER JOIN channel_master ON channel_master.`CHANNEL_ID` = song_rights_master.`CHANNEL_IDS`
LEFT JOIN programmes_master ON songs_master.`PROGRAMME_ID` = programmes_master.`PROGRAMME_ID`
WHERE playlist_details.`EVENT_TYPE` = 'Song' AND
song_rights_master.`songs_agreements_master_id`='".$agreement."'
GROUP BY SongName

См.простой пример здесь

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...