2016-07-21 4 views
0

MySQL LIKEでいくつかのフィールドを検索すると、文字列が見つかったフィールドを知る方法がありますか?MySQL:検索文字列が見つかったフィールドのリスト?

SELECT * FROM DB WHERE title like "%search%" OR description LIKE "%search%" or tags LIKE "%search%

私はCASEWHENを知っている:

​​

しかし、文字列がいくつかの分野で発見された場合に最終的に私はフィールドのカンマ区切りのリストをしたいと思います。

これは可能ですか?

明確にする編集:

検索用語がタイトル&説明で発見されたとき、私は、 『タイトル、説明』であることを私のフィールド `found_in'をしたいと思います。

答えて

0

が可能な方法は、UNION句、クエリ、フィールドごとに1つの一連のだろう

SELECT *, 
     CASE WHEN (title + description) like '%search%' THEN title +', ' + description 
     [...] 
     END AS found_in 
    FROM [...] 
WHERE [...] 
+0

ありがとうございますが、クエリは正常に動作します。 – thomas

+0

私の質問が更新されました。この@thomasを試してください。 –

1

、これを試してみてください。それぞれが見つかったフィールドの名前を返し、それをサブクエリとして使用し、結果に対してGROUP_CONCATを実行します: -

SELECT id, 
     title, 
     description, 
     tags, 
     GROUP_CONCAT(field_found) 
FROM 
(
    SELECT 'title' AS field_found, 
      id, 
      title, 
      description, 
      tags 
    FROM DB 
    WHERE title like "%search%" 
    UNION 
    SELECT 'description' AS field_found, 
      id, 
      title, 
      description, 
      tags 
    FROM DB 
    WHERE description LIKE "%search%" 
    UNION 
    SELECT 'tags' AS field_found, 
      id, 
      title, 
      description, 
      tags 
    FROM DB 
    WHERE tags LIKE "%search% 
) sub0 
GROUP BY id, 
     title, 
     description, 
     tags 
+0

ありがとう!これは本当に役立ちます! – thomas

関連する問題