My Table:
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查询..。
发布于 2013-02-24 19:03:01
我不能百分之百地确定您想返回的结果,但是您可以通过如下查询获得每个具有数学和生物学特性的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}是您的列表(如原始问题中的“数学”、“生物学”),其中{选项总数}等于所有必须匹配的唯一值的数量(本例中为2)。再一次,让我强调,这只有在每堂课都是独一无二的情况下才能奏效.一旦不是,你就会得到假阳性。
发布于 2013-02-24 19:05:30
你可以找这个
$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-24 19:25:21
如果你想要同时学习数学和生物的人的名单,这应该是可行的:
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'
)https://stackoverflow.com/questions/15055336
复制相似问题