У меня три таблицы: albums
, songs
и images
. таблицы выглядят примерно так:MySQL условный LEFT JOIN?
albums
стол:
id | title | image_id
5 | First Album | 1
6 | Another Album | 2
songs
стол:
id | album_id | title | image_id
32 | 5 | My Song | 3
33 | 5 | Another One | 4
34 | 5 | First Song | 0
35 | 6 | My Song #2 | 0
36 | 6 | Fancy Title | 0
37 | 6 | My Love Song | 5
images
стол:
id | path
1 | path/to/image1.jpg
2 | path/to/image2.jpg
3 | path/to/image3.jpg
4 | path/to/image4.jpg
5 | path/to/image5.jpg
Я пытаюсь отобразить список песни с их т иглами и соответствующими изображениями.
Если у песен нет изображения (если image_id
столбец 0
), то я хочу просто использовать образ альбома.
Единственный код, который я до сих пор это, и я застрял:
SELECT songs.title, images.path
FROM songs
LEFT JOIN images
ON images.id = songs.image_id
// ...if songs.image_id is 0, i want to just use the image_id of the corresponding album instead
Было бы хорошо, если бы это был эффективный запрос, который может работать с большими таблицами.
Используйте [ 'COALESCE()'] (http://dev.mysql.com/doc/refman/5.7/en/comparison- operator.html # function_coalesce) –
По производительности, возможно, лучше использовать NULL вместо 0. Таким образом, база данных знает, что не может быть соответствующей строки, прежде чем пытаться подключиться к JOIN. – Thilo