Результаты поиска по разным полям с ПОДОБНЫМ

#mysql #database #mariadb

#mysql #База данных #mariadb

Вопрос:

У меня есть 2 таблицы в моей базе данных (до сих пор), одна для хранения имен исполнителей, а другая для хранения песен (название и текст песни), но мне нужно использовать одну SELECT для поиска внутри имени исполнителя, названия песни и текста песни одновременно, но я получаю частичный результат и много 1292 ошибки.

Таблица песен (песни)

 song_id
artist_id
song_name VARCHAR
song_lyric TEXT
 

Таблица художников (художники)

 artist_id
artist_name
 

Моя первая идея SQL была LEFT JOIN примерно такой:

 SELECT s.song_name AS SONG, s.song_id AS ID FROM songs AS s
    LEFT JOIN artists AS a ON s.song_id = a.artist_id
    WHERE s.song_name OR s.song_lyric OR a.artist_name LIKE '%some value%'
 

Это SELECT дает результат, если я использую имя исполнителя (если у меня есть уникальное имя), но если я попробую какое-нибудь регулярное выражение, например ‘Sun’, ‘Son’, я получу пустой набор результатов.

Любая помощь будет приветствоваться

Комментарии:

1. WHERE s.song_name LIKE '%some value%' OR s.song_lyric LIKE '%some value%' OR a.artist_name LIKE '%some value%'

2. Каков ваш ожидаемый результат?. Почему вы используете s.song_id = a.artist_id in LEFT JOIN ?

3. Я хочу, чтобы идентификатор, подобный скрытому полю (в Lazarus), создавал другой поиск, а название песни основывалось на имени исполнителя, названии песни или некоторых текстах.

Ответ №1:

 SELECT s.song_name AS SONG, s.song_id AS ID FROM songs AS s
LEFT JOIN artists AS a ON s.artist_id = a.artist_id
WHERE s.song_name LIKE '%some value%' OR s.song_lyric LIKE '%some value%' 
OR a.artist_name LIKE '%some value%'
 

Ответ №2:

попробуй это.

 SELECT s.song_name AS SONG, s.song_id AS ID FROM songs AS s LEFT JOIN artists
    AS a ON s.artist_id = a.artist_id WHERE s.song_name LIKE '%some value%' OR
    s.song_lyric LIKE '%some value%' OR a.artist_name LIKE '%some value%'