Php 从字符串中选择COUNT()

Php 从字符串中选择COUNT(),php,mysqli,while-loop,Php,Mysqli,While Loop,我有下表: 课程|教室 课程1 | G1 课程2 | G2、G3、F1 课程3 | G1、G4、F1 我想数一数每个教室有多少门课 例如: 教室|计数 G1:2 G2:1 G3:1 G4:1 F1:2 谢谢大家! 您应该规范化DB 就你而言: 表教室 id | name ---------------- 1 G1 2 G2 3 G3 4 G4 5 F1 id_course | id_ClassRoom --------------

我有下表:

课程|教室


课程1 | G1

课程2 | G2、G3、F1

课程3 | G1、G4、F1


我想数一数每个教室有多少门课

例如:

教室|计数


G1:2

G2:1

G3:1

G4:1

F1:2


谢谢大家!

您应该规范化DB

就你而言:


教室

id  |  name
----------------
1      G1
2      G2
3      G3
4      G4
5      F1
id_course |  id_ClassRoom
-------------------------
    1          1
    2          2
    2          3
    2          4
    3          1
    3          4
    3          5
课程

id  |  name
--------------
1      Course 1
2      Course 2
3      Course 3
课程教室

id  |  name
----------------
1      G1
2      G2
3      G3
4      G4
5      F1
id_course |  id_ClassRoom
-------------------------
    1          1
    2          2
    2          3
    2          4
    3          1
    3          4
    3          5

您的最终SQL:

SELECT ClassRoom.name, count(ClassRoom.id)
FROM CourseClassRoom
JOIN ClassRoom ON CourseClassRoom.id_ClassRoom = ClassRoom.id
GROUP BY ClassRoom.name

如果您想使用SQL,您需要一个class_rooms表

mysql> select * from class_rooms;
+------+
| id   |
+------+
| G1   |
| G2   |
| G3   |
| G4   |
| F1   |
+------+
mysql> select * from course_classrooms;
+--------+-------------+
| course | class_rooms |
+--------+-------------+
| C1     | G1          |
| C2     | G2,G3,F1    |
| C3     | G1,G4,F1    |
+--------+-------------+

SELECT cr.id ClassRoom, count(ccr.course) Count
FROM class_rooms cr 
LEFT JOIN course_classrooms ccr
ON find_in_set(cr.id,ccr.class_rooms)
GROUP BY cr.id;
+-----------+-------+
| ClassRoom | Count |
+-----------+-------+
| F1        |     2 |
| G1        |     2 |
| G2        |     1 |
| G3        |     1 |
| G4        |     1 |
+-----------+-------+
或者你可以
从课程中选择*
然后用PHP计数

$counts=[];
while($row = $result->fetch_assoc()){
  foreach(explode(',',$row['classrooms']) as $classroom){
    isset($counts[$classroom])?$counts[$classroom]++:$counts[$classroom]=1;
  }
}
print_r($counts);

你试过allready吗?你的数据结构会使这变得比必要的更困难;你应该规范化你的数据库。这意味着使用单独的表来存储教室和教室与课程的关系。最好规范化DB结构。这可能类似于学生想要注册不同的课程。我想数一数每门课程要招多少学生。或者客户投票选择他们喜欢的产品。谢谢,你应该忽略这些评论。