【问题标题】:Search results on different fields with LIKE使用 LIKE 搜索不同字段的结果
【发布时间】:2016-10-13 23:24:23
【问题描述】:

我的数据库中有 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”,我会得到一组空结果。

欢迎任何帮助

【问题讨论】:

  • WHERE s.song_name LIKE '%some value%' OR s.song_lyric LIKE '%some value%' OR a.artist_name LIKE '%some value%'
  • 您的预期输出是什么?为什么在LEFT JOIN 中使用s.song_id = a.artist_id
  • 我希望像隐藏字段一样的 ID(在 Lazarus 中)创建另一个搜索,以及基于艺术家姓名、歌曲名称或某些歌词的歌曲名称。

标签: mysql database mariadb


【解决方案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%'
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-10-23
      • 2019-03-16
      • 2010-12-17
      • 1970-01-01
      • 2011-07-13
      • 1970-01-01
      • 1970-01-01
      • 2016-10-18
      相关资源
      最近更新 更多