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结构。这可能类似于学生想要注册不同的课程。我想数一数每门课程要招多少学生。或者客户投票选择他们喜欢的产品。谢谢,你应该忽略这些评论。