php - 从数据库中选择随机三份(或更多)

标签 php mysqli

我有两个表:

 Students         Student_Grades
   V------------------------V
+----+------+    +----+------------+---------+-------+
| id | name |    | id | student_id | subject | grade |
+----+------+    +----+------------+---------+-------+
| 0  | Dave |    | 0  | 0          | Math    | 100   |
+----+------+    +----+------------+---------+-------+
| 1  | John |    | 1  | 0          | Chem    | 90    |
+----+------+    +----+------------+---------+-------+
| 2  | Kate |    | 2  | 0          | CompSCI | 95    |
+----+------+    +----+------------+---------+-------+
| 3  | Mimi |    | 3  | 1          | ELA     | 98    |
+----+------+    +----+------------+---------+-------+
                 | 4  | 2          | Biology | 92    |
                 +----+------------+---------+-------+
                 | 5  | 2          | Chem    | 94    |
                 +----+------------+---------+-------+
                 | 6  | 2          | Math    | 98    |
                 +----+------------+---------+-------+
                 | 7  | 3          | Math    | 100   |
                 +----+------------+---------+-------+ 

我想从注册了三个以上科目的随机学生中选择所有科目和成绩。 (DaveKate )

学生JohnMimi甚至不会被考虑,因为他们没有注册三个科目。

我知道我可以使用 PHP 实现此目的,但我希望通过对数据库的一次查询来完成此操作。

SELECT * FROM Students t JOIN (SELECT CEIL(MAX(ID)*RAND()) AS ID FROM Students) AS x ON t.ID >= x.ID LIMIT 1

通过上述查询,我​​随机选择了一名学生,我可以进去检查他们是否有三门 SELECT count(subjects) FROM Students WHERE id=random_id 的科目。 .

如果返回的计数低于 3,那么我会丢弃结果并再次运行第一个查询。

我如何在一个查询中尝试执行此操作?

最佳答案

这已经过测试并且可以工作:

SELECT * 
FROM Students s 
JOIN (
    SELECT student_id 
    FROM Student_Grades 
    GROUP BY student_id 
    HAVING COUNT(*) >= 3 
    ORDER BY RAND() 
    LIMIT 1
) rs 
    ON rs.student_id = s.id 
JOIN 
    Student_Grades sg 
    ON sg.student_id = s.id

这是 SQL fiddle :http://sqlfiddle.com/#!2/e5b5b/1

关于php - 从数据库中选择随机三份(或更多),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17268193/

相关文章:

java - 在网站后端运行 java 应用程序

php - 第 2 行第 1 列错误 : Document is empty on php

php - 我怎样才能找出 mysqli 扩展有什么问题?

php - 为什么 get_headers() 返回 400 Bad request,而 CLI curl 返回 200 OK?

php - 我可以在 PHP 中混合使用 MySQL API 吗?

php - 从 MySQL 更新到 MySQLi 时出现从数据库中提取数据的问题

PHP MySQL 使用 PHP 脚本在数据库表中插入数据

php - 为用户存储密码历史的最佳技术?

php - 使用ajax将点击时的id名称传递给php

php - 使用 PHP 将 JPG 合并为一个 PDF