MySQL: количество номеров LIKE-матчей за вход

Я пытаюсь объяснить, что я подразумеваю под матчи на простом примере:

У меня есть таблица myprods вот так:

 id | name 1 galaxy s4 mini 2 samsung galaxy s4 3 galaxy galaxy s3 4 iphone 4s 5 apple iphone 4s 

У меня был бы такой запрос:

 SELECT * FROM myprods WHERE name LIKE "%samsung%" OR name LIKE "%galaxy%" OR name LIKE "%s4%" 

Результат моего запроса:

 id | name 1 galaxy s4 mini 2 galaxy s4 3 galaxy galaxy s3 

и теперь я бы не только возвращал согласованные строки, но и количество обращений. ОДИН хит будет, если ОДНИМ из LIKE-фраз относится к строке. Поэтому в этом случае я ожидал бы, что хиты будут равны 0, 1, 2 или 3. Это означает: выражение LIKE "%galaxy%" НЕ следует считать двумя ударами для id = 3, это просто считается «ударом», или "не ударил".

Ожидаемый результат:

 id | name | hits 1 galaxy s4 mini 2 2 samsung galaxy s4 3 3 galaxy galaxy s3 1 

Возможно в выраженной фразе mysql? Или я должен выбрать только строки с моим запросом выше, а затем сопоставить отдельные подстроки с возвращаемыми именами через strpos в PHP?

заранее спасибо

Related of "MySQL: количество номеров LIKE-матчей за вход"

В MySQL логические выражения могут использоваться как целые числа – с 0 для false и 1 для true. Итак, следующие работы:

 SELECT p.*, ((name LIKE '%samsung%') + (name LIKE '%galaxy%') + (name LIKE '%s4%')) as hits FROM myprods p WHERE name LIKE '%samsung%' OR name LIKE '%galaxy%' OR name LIKE '%s4%'; 

РЕДАКТИРОВАТЬ:

Если MySQL, вы также можете выразить этот запрос как:

 SELECT p.*, ((name LIKE '%samsung%') + (name LIKE '%galaxy%') + (name LIKE '%s4%')) as hits FROM myprods p HAVING hits > 0; 

Использование в этом контексте является расширением SQL и не работает в других базах данных. Но это позволяет запросу ссылаться на псевдоним столбца для фильтрации, не используя подзапрос.