2013-02-24 58 views
0

我表:MySQL查詢和複選框進場

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查詢...

+0

你能否讓它更清楚? – ssilas777 2013-02-24 18:57:09

+0

你的問題不清楚。也許顯示一些示例代碼可能會有幫助,以及預期的和實際的結果。 – mjshaw 2013-02-24 19:02:15

+1

我不喜歡當問問題,然後不回答那些誰想要幫助他 – 2013-02-24 19:14:09

回答

1

我不是100%確定你想返回什麼結果,查詢關鍵詞,比如:

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 

對於更靈活的查詢,支持任意數量的匹配,假設你永遠只能在每次課型的一個(你可能想要做一個獨特的密鑰對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 

其中{匹配列表}是您的列表(例如'數學','生物學'),以及{選項總數}等於所有必須匹配的唯一值的數量(本例中爲2)。再次,讓我強調,這隻有在每個pno每課都是獨一無二的時候纔會起作用......一旦不是,你會得到誤報。

0

你可以找這個

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

,當他們選擇其他複選框

如果你想要的是採取兩個數學人的名單,你可以添加此

$sql .= "OR lesson= '$math' " ; 
+0

這將無法正常工作,因爲課程將永遠不會同時是'生物學'和'數學' – 2013-02-24 19:09:58

+0

是的,他他們可以檢查數學和生物學看看OP – 2013-02-24 19:10:47

+0

'問題在這裏,我想過濾只採取兩個數學和生物學!' – 2013-02-24 19:11:11

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' 
) 
+0

它同時適用於數學和生物學。但用戶只檢查數學,它不工作時,我刪除了最後的「和存在」塊。 – Cem 2013-02-24 23:21:49