0

誰かが私を助けてくれることを願って、私は夢中になります。

私は1つのテーブルを持っています:

user_skils:
ID  | UID | SKILL
1     23    House
2     5    Disco
3     8    Punk
...  ...    ...
...  ...    ...
...  ...    ...

次に、ユーザーが条件に一致しないユーザーを検索して除外できる検索クエリを作成します。

検索例:ディスコ、パンク、ハウス

つまり、この3つの基準に一致するユーザー(House AND Disco AND PUNK)のみが必要です...クエリを介してこれを管理するにはどうすればよいですか?

何かのようなもの

SELECT count(uid) as matches , 
  GROUP_CONCAT(skill) as skills_grouped 
FROM user_skilks 
WHERE skill LIKE %Disco% 
  AND skill LIKE %punk% 
  AND skill LIKE %house%

私に次のようなものを与える必要があります:

Matches | skills_grouped
3         House,Punk,Disco

3人がこの基準に一致することを意味します...

4

1 に答える 1

1

テーブルを次のようにグループ化してUIDから、結果のグループをフィルタリングして (つまり、HAVING句を使用して)、関心のあるものを探します。

SELECT   UID
FROM     user_skils
GROUP BY UID
HAVING   SUM(SKILL LIKE '%House%')
     AND SUM(SKILL LIKE '%Disco%')
     AND SUM(SKILL LIKE '%Punk%' )

真のブール型がないため、これは MySQL で機能します。他の RDBMS では、CASE式を使用する必要があります。

HAVING   SUM(CASE WHEN SKILL LIKE '%House%' THEN 1 ELSE 0 END) > 0
     AND ...

そのようなユーザーの数を取得するには、結果を再度グループ化します。

SELECT COUNT(*) FROM (
  SELECT   1
  FROM     user_skils
  GROUP BY UID
  HAVING   SUM(SKILL LIKE '%House%')
       AND SUM(SKILL LIKE '%Disco%')
       AND SUM(SKILL LIKE '%Punk%' )
) t
于 2013-01-16T23:26:35.900 に答える