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% 确定您想要返回什么结果,但是您可以通过如下查询获得具有数学和生物学的每个结果的不同 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

对于支持任意数量匹配的更灵活的查询,假设您只有一种课程类型(您可能希望在 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} 是您的列表(例如原始问题中的“数学”、“生物学”),其中 {Total Number of options} 等于所有必须匹配的唯一值的数量(在此案子)。再次强调,这只有在每个 pno 的每节课都是独一无二的情况下才有效……如果不是,你就会得到误报。

于 2013-02-24T19:03:01.497 回答
0

you may looking for this

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

and when they select the other checkbox

you may add this

$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 回答