До сих пор я не добился успеха в моем поиске по объединению 4 таблиц. У меня есть 4 таблицы:Комплексный запрос MySQL из 4 таблиц
содержание
content_id | source_id | content_title | content_date
--------------------------------------------------------
1 | 1 | The factory | 189982398300
2 | 2 | Cold and cloudy | 189982398299
3 | 2 | Green tea | 189982398298
источники
source_id | source_name
-------------------
1 | BBC
2 | Reuters
настройки
setting_id | setting_name
-------------------------------
1 | bbc_iplayer_string
2 | reuters_video_id
3 | reuters_category
content_join_settings
content_id | setting_id | setting_data
------------------------------------------
1 | 1 | Js88sdhjsd0gDS09
2 | 2 | video_8AJK3ADJD8
2 | 3 | weather
3 | 2 | video_K7KD8N2ND9
3 | 3 | food and drinks
Так как вы, возможно, уже заметили, каждая запись контента имеет собственный источник связан с ним, и поставляется с дополнительными настройками в зависимости от источника. В сообщениях BBC есть bbc_iplayer_string
, а сообщения от Reuters - reuters_video_id
и reuters_category
. Конечно, это всего лишь пример.
Я хотел бы, чтобы результаты были объединены, а также с именем setting_name
в качестве имени столбца. Я не знаю, как объяснить это, так что я буду показывать:
content_id | source_name | content_title | content_date | bbc_iplayer_string | reuters_video_id | reuters_category
--------------------------------------------------------------------------------------------------------
1 | BBC | The factory | 189982398300 | Js88sdhjsd0gDS09 | NULL | NULL
2 | Reuters | Cold and cloudy | 189982398299 | NULL | video_8AJK3ADJD8 | weather
3 | Reuters | Green tea | 189982398298 | NULL | video_K7KD8N2ND9 | food and drinks
Я не очень опытный в сложных MySQL запросов. Я не знаю, с чего начать искать, не говоря уже о том, что искать. Я начал с этого вопроса, но я понятия не имею, как продолжить. Я, вероятно, даже не близко.
SELECT
*
FROM
content,
sources,
settings,
content_join_settings
WHERE
content.content_id = content_join_settings.content_id AND
settings.setting_id = content_join_settings.setting_id AND
sources.source_id = content.source_id
GROUP BY
content.content_id
ORDER BY
content.content_date
DESC
вы пробовали внутреннее соединение еще? – Raiyan
Почему группа? Большинство баз данных будут вызывать ошибку для этого в предложении group by ... MySQL не возвращает ошибку и делает неправильную вещь. Групповые данные для агрегатов и обычно не применяются к select *. Вы также используете старый синтаксис соединения ... вы не согласны с использованием внутреннего соединения tablea a on ... syntax? – Twelfth
@raiyan - он делает внутреннее соединение, только старый синтаксис. – Twelfth