0

次の形式の MySQL クエリがあります。

SELECT * 
FROM `table` 
WHERE `val1` IN (x,y,z)
AND (
  `val2` LIKE '%a%' OR
  `val2` LIKE '%b%' OR
  `val2` LIKE '%c%' OR
  ...
  `val2` LIKE '%x%'
)

私がやりたいのは、これらの LIKE ステートメントが一致する回数を合計することです。たとえば、a、e、および y の一致が見つかった場合、その合計は 3 になり、ORDER BY を使用して「ヒット」が最も多い行を検索できます。

編集: ワイルドカードとしてクエリで % を & として使用していません。

4

1 に答える 1

0

MySQL でそれらを一緒に追加できます。

SELECT *,
       ((`val2` LIKE '&a&') +
        (`val2` LIKE '&b&') +
        (`val2` LIKE '&c&') +
        ...
       ) as nummatches
FROM `table` 
WHERE `val1` IN (x,y,z)
AND (
  `val2` LIKE '&a&' OR
  `val2` LIKE '&b&' OR
  `val2` LIKE '&c&' OR
  ...
  `val2` LIKE '&x&'
)

実際、クエリを次のように単純化できます。

SELECT *,
       ((`val2` LIKE '&a&') +
        ( `val2` LIKE '&b&') +
        (`val2` LIKE '&c&') +
        ...
       ) as nummatches
FROM `table` 
WHERE `val1` IN (x,y,z)
having nummatches > 0;
于 2013-08-27T21:57:37.950 に答える