3

注: MySQL 4.0 を使用しているため、(現時点では) サブクエリはありません。

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

  • 「user_details」テーブル
  • user_id と「skill_id」を持つ「skills」テーブル。これは、別の場所で定義された定義済みの一連のスキルにマップされます。

現在のクエリでは、管理者はスキルを選択してユーザーを検索できます。クエリは OR 方式で機能します。たとえば、次のようになります。

LEFT JOIN skills 
ON (ud.user_id = skills.user_id)  
WHERE skills.skill_id in (51, 52, 53, 54, 55)
GROUP BY ud.user_id

これにより返されるレコードが多すぎるため、この検索フィールドを AND 方式で機能させたいと考えています。この場合、ユーザーは選択したすべてのスキルを検索で返す必要があります。

サブクエリが最適なオプションである場合、MySQL をアップグレードできる可能性があります。

編集: group by、count、having などと関係があります。返される一致した行の数を要件として group by コマンドを制限できますか? (例: この例では 5)。

edit2: テスト:

HAVING COUNT( * ) > 5
4

3 に答える 3

2

サブクエリや結合は必要ありません。

SELECT user_id
FROM skills
WHERE skill_id IN (51, 52, 53, 54, 55)
GROUP BY user_id
HAVING COUNT(*) = 5;
于 2008-12-12T00:33:46.140 に答える
1

シングル結合を追加するだけです。

内部結合スキルsONu.id-us.useridおよびskill_id=$s1
内部結合スキルsONu.id-us.useridおよびskill_id=$s2
内部結合スキルsONu.id-us.useridおよびskill_id=$ s3
内部結合スキルsONu.id-us.useridおよびskill_id=$s4
など。

It will be required to join to them all. You don't need any groups or counts.

于 2008-12-12T00:27:41.503 に答える
0

同じクエリにユーザーの詳細を含めたい場合は、次のようにするだけです。

SELECT * FROM user_details  
JOIN skills USING (user_id) 
WHERE skill_id IN (51, 52, 53, 54, 55) 
GROUP BY user_id 
HAVING COUNT(*) = 5
于 2008-12-12T01:46:07.710 に答える