2016-07-21 1 views
0

Когда я ищу несколько полей с MySQL LIKE, есть ли способ узнать, в каких полях найдена строка?MySQL: Список полей, в которых была найдена строка поиска?

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

Я знаю CASEWHEN:

SELECT *,CASE WHEN title like "%search%" THEN 'title' [...] END AS found_in WHERE [...]

Но в конечном счете, я хотел бы разделенный запятыми список полей, если строка была найдена в нескольких областях.

Возможно ли это?

Редактировать, чтобы уточнить:

Я хотел бы мое поле `found_in' быть„название, описание“, когда термин поиска найдено в названии & описании.

ответ

0

Попробуйте это,

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

Спасибо, но запрос работает отлично. – thomas

+0

Я обновил свой запрос, попробовал это @thomas. –

1

Возможный путь будет серия UNIONed запросов, по одному для каждого поля. каждый из которых возвращает имя поля его найти, то он используется в качестве подзапроса и делать 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