1

結合されたテーブルで MySQL の "FIELD_IN_SET()" に相当するものを探しています。これが私がやりたいことの例です。

私は3つのテーブルを持っています。最初のフィールドには、「user_id」および「user_name」フィールドが含まれます。2 番目のフィールドには、「id」、「user_id」、および「role_id」が含まれます。3 番目には「id」、「role_name」が含まれます。

指定された 2 つの異なるロールを所有するユーザーを検索したいと考えています。LEFT JOIN の後、私のテーブルは次のようになります。

user_id - user_name          - role_name
12      - Yoda               - jedi
12      - Yoda               - master
15      - Obi-Wan Kenobi     - jedi

最初の質問は、「ジェダイ」と「マスター」の両方であるユーザーを検索する方法です。2 番目の質問は、PHP 側で実行する方がよいか (最適化 || 読みやすさ) (すべての結果を配列で取得し、ループを実行して目的を確認する)、または MySQL クエリで直接実行する方がよいかということです。クエリを動的に作成する必要があります (優れたユーザー データベース内の PHP/MySQL 検索エンジン用です)。

ありがとうございました :) 。ユーザー1527491

4

1 に答える 1

1

この問題はRELATION DIVISION

SELECT  a.user_name
FROM    firstTable a
        INNER JOIN secondTable b
            ON a.user_ID = b.user_ID
        INNER JOIN thirstTable c
            ON b.role_ID = c.role_ID
WHERE   c.role_NAME IN ('jedi', 'master')
GROUP   BY a.user_name
HAVING  COUNT(*) = 2

role_NAMEfor everyに対して一意の制約が定義されていない場合はuser_nameDISTINCTキーワードが必要です。

SELECT  a.user_name
FROM    firstTable a
        INNER JOIN secondTable b
            ON a.user_ID = b.user_ID
        INNER JOIN thirstTable c
            ON b.role_ID = c.role_ID
WHERE   c.role_NAME IN ('jedi', 'master')
GROUP   BY a.user_name
HAVING  COUNT(DISTINCT c.role_NAME) = 2
于 2013-03-03T14:06:23.460 に答える