0

私のテーブル:

pno     name         lesson
-----------------------------
1       John         Math
1       John         Biology
2       Lisa         Biology
3       Emma         Math
3       Emma         Art
3       Emma         Pyhsic

レッスンは「チェックボックス」のように考えることができます。ユーザーがレッスンをチェックすると、テーブルがフィルターされます。問題は、私がフィルタリングしたいということです 数学と生物学の両方を取るだけです!


ユーザーが数学のみをチェックした場合。

私のフィルタリングされたテーブル:

pno     name         lesson
-----------------------------
1       John         Math
3       Emma         Math

ユーザーが数学と生物学の両方をチェックした場合。

私のフィルタリングされたテーブル:

pno     name         lesson
-----------------------------
1       John         Math
1       John         Biology

私の HTML デザインはhttp://jsbin.com/adarih/2/です

ユーザーが数学と生物学の両方をチェックしたとき、私はライム色をマークしました。リサは生物学を持っていますが、数学は持っていません。私はリサを服用していません。エマは数学を取りますが、生物学は取りません。私はエマを服用していません。

実際、それはとても簡単に思えます。しかし、それは私にとって重要なSQLクエリです...

4

3 に答える 3

1

どのような結果を返したいのか 100% 確信があるわけではありませんが、次のようなクエリを使用して、Math と Biology の両方を持つそれぞれの個別の pno と名前を取得できます。

SELECT DISTINCT Table1.pno, Table1.name
FROM SomeTable Table1
  INNER JOIN SomeTable Table2 ON Table2.pno = Table1.pno AND Table2.lesson = 'Biology'
WHERE Table1.lesson = 'Math'
ORDER BY Table1.pno

任意の数の一致をサポートするより柔軟なクエリについては、各レッスン タイプが 1 つしかないと仮定すると (これを保証するために、pno とレッスンで一意のキーを実行することをお勧めします)、次のようにすることができます。

SELECT pno, name
FROM SomeTable
WHERE lesson IN ({Match List})
GROUP BY pno, name
HAVING COUNT(1) = {Total Number of options}
ORDER BY pno

{Match List} はあなたのリスト (元の質問の「Math」、「Biology」など) であり、{Total Number of options} はすべてが一致する必要がある一意の値の数 (この例では 2) です。場合)。繰り返しますが、これは pno ごとの各レッスンが一意である場合にのみ機能することを強調しておきます...そうでない場合、誤検知が発生します。

于 2013-02-24T19:03:01.497 に答える
0

あなたはこれを探しているかもしれません

$sql="select * from your_table 
where lesson =  '$biology'";
                      ^^-------this is the variable of which they select from check box

そして彼らが他のチェックボックスを選択したとき

これを追加できます

$sql .= "OR lesson= '$math' " ;
于 2013-02-24T19:05:30.073 に答える
0

数学と生物学の両方を履修している人のリストが必要な場合は、次のようにします。

SELECT t1.pno, t1.name
FROM myTable t1
WHERE EXISTS
(
SELECT 1
FROM myTable t2
WHERE t1.pno = t2.pno
AND t2.lesson = 'Math'
)
AND EXISTS
(
SELECT 1
FROM myTable t3
WHERE t1.pno = t3.pno
AND t3.lesson = 'Biology'
)
于 2013-02-24T19:25:21.687 に答える