5

ここで私の質問の非常に抽象的なバージョンを提供しているので、ご容赦ください。特定のボディに同じタイプの特定の複数のパラメーターがあるかどうかを確認するクエリがあります。たとえば、男の子はチョコレートに関する限り、複数の選択肢があります。しかし、私は、私が言及したチョコレートを正確に持っているテーブルから男の子を選びたい. 多かれ少なかれ、「LIKE」でも「IN()」でもない。

SELECT boy_id from boys_chocolates WHERE chocolate_id ONLY IN('$string');

..ここでもちろん、'$string' は PHP 変数で、男の子を引っ張るために使用したいチョコレートのみのカンマ区切りの値を含みます。

これが無効な MySQL ステートメントであることはわかっていますが、これに相当する有効なものはありますか?

編集:

これは、特殊なケースでレコードを取得するより包括的なクエリですが、常にではありません。

SELECT boys.* FROM schools_boys INNER JOIN boys ON boys.boy_id=schools_boys.boy_id
INNER JOIN chocolates_boys a ON a.boy_id=boys.boy_id INNER JOIN schools
ON schools.school_id=schools_boys.school_id WHERE a.chocolate_id IN(1000,1003)
AND 
            EXISTS
            (
                    SELECT 1
                    FROM chocolates_boys b
                    WHERE a.boy_id=b.boy_id
                    GROUP BY boy_id
                    HAVING COUNT(DISTINCT chocolate_id) = '2'
                    )

                GROUP BY schools_boys.boy_id HAVING COUNT(*) = '2'

Boys Table
+--------+-------------+
| id     | boy         |
+--------+-------------+
| 10007  | Boy1        |
| 10008  | Boy2        |
| 10009  | Boy3        |
+--------+-------------+

Chocolates Boys Table
+----+---------+--------------+
| id | chocolate_id | boy_id |
+----+--------------+---------+
| 1  | 1000         | 10007   |
| 2  | 1003         | 10007   |
| 3  | 1006         | 10007   |
| 4  | 1000         | 10009   |
| 5  | 1001         | 10009   |
| 6  | 1005         | 10009   |
+----+--------------+---------+

1000 だけを選択して 2 人の男の子 (または) 1000 と 1003 を選択して ID 10007 の男の子を抽出しても何も起こりません。

4

1 に答える 1