如何计算表中具有另一个表中的特定属性的行

时间:2014-11-06 08:42:15

标签: php mysql sql

table1
--------------
| sn | class |
--------------

table2
----------------
| id | student |
---------------- 

所有都是int因为sn是table1链接到table2中的student snid自动增加。向table2插入数据时,学生列与表1中的sn相同

现在我想在table2中选择student,但只选择table1中的class为" 3" 我的语法就是这样;

$count = mysql_query(SELECT student from table2 whose class in table1 =3)

所以我可以通过说

来计算它们
$quantity = mysql_num_rows($count)

现在我的问题是,如果sql也有这个关键字,或者我该怎么做呢。

$count = mysql_query(SELECT student from table2 whose class in table1 =3)

2 个答案:

答案 0 :(得分:1)

您需要加入表格才能正确过滤结果。

(1)这将为您提供3级学生的数量。

$count = mysql_query(
  'SELECT COUNT(t2.student) 
   FROM table2 t2 
   INNER JOIN table1 t1
     ON t1.sn = t2.student
     AND t1.class = 3'
);

(2)这将为您提供所有课程和每个班级的学生人数。

$count = mysql_query(
  'SELECT t1.class, COUNT(t2.student) 
   FROM table2 t2 
   INNER JOIN table1 t1
     ON t1.sn = t2.student
   GROUP BY t1.class
   ORDER BY t1.class'
);

(3)这将为您提供所有课程和学生名单。

$list = mysql_query(
  'SELECT t1.class, GROUP_CONCAT(t2.student SEPARATOR ',') 
   FROM table2 t2 
   INNER JOIN table1 t1
     ON t1.sn = t2.student
   GROUP BY t1.class
   ORDER BY t1.class'
);

答案 1 :(得分:0)

您应该加入这两个表并将结果限制为具有table1.class = 3

的表
SELECT
    student
FROM
    table2 a
    JOIN table1 b ON (a.student = b.sn)
WHERE b.class = 3

如果你想要计数,你也可以通过SQL使用聚合函数

来完成
SELECT
    COUNT(student)
FROM
    table2 a
    JOIN table1 b ON (a.student = b.sn)
WHERE b.class = 3