php - 检测 MySQL 数据库记录之间的关系

标签 php mysql mysqli

假设我有 3 个数据库表:

  1. 教师,具有以下领域:
    • 编号
    • 姓名
  2. 主题,包含以下字段:
    • 编号
    • 姓名
  3. teachers-subjects,具有以下字段:
    • teacher_id
    • 主题编号

所以,一些老师有共同的科目。

我考虑过用于查询的算法:

For each record s in subjects table:

Select the count in teachers_subjects table.
If count is greater than 1
In teacher_subjects, get teacher_id's where subject_id is s.

建立关系对。

我想得到这样的输出:

+----------+----------+---------------+
| Teacher1 | Teacher2 | Relationships |
+----------+----------+---------------+
| John     | Larry    |            10 |
| John     | Samantha |            12 |
| Samantha | Larry    |             9 |
| Ian      | Louis    |             3 |
+----------+----------+---------------+

如果我需要检索哪些对象建立了关系,我们需要得到如下内容:

+----+----------+----------+
| id | teacher1 | teacher2 |
+----+----------+----------+
|  1 | John     | Larry    |
|  2 | John     | Samantha |
|  3 | Samantha | Larry    |
|  4 | Ian      | Louis    |
+----+----------+----------+

还有类似的东西:

+-----+------------+
| id  |  subject   |
+-----+------------+
| 1   | math       |
| 1   | english    |
| 1   | science    |
| ... | ...        |
| ... | ...        |
| 4   | science    |
| 4   | literature |
| 4   | databases  |
+-----+------------+

在图形上,我在通过网络浏览器咨询的图表中表示:

Graph from DB query

所以当我将鼠标悬停在一个边缘时,它会显示关系信息。

我将通过 php 编程接收查询结果,什么样的查询或存储过程会产生我需要的输出?

最佳答案

试试这个(你应该在 SQLFiddle 中加载一些示例数据以便更好地测试)

SELECT t1.`name` AS teacher1, t2.`name` AS teacher2, count(*)
FROM teachers AS t1
JOIN teachers AS t2
  ON t1.id > t2.id
JOIN teacher_subjects AS ts1
  ON ts1.teacher_id = t1.id
JOIN teacher_subjects AS ts2
  ON ts2.teacher_id = t2.id
    AND ts2.subject_id = ts1.subject_id
GROUP BY teacher1, teacher2
ORDER BY COUNT(*) DESC;

关于php - 检测 MySQL 数据库记录之间的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20196723/

相关文章:

php - 如何使全日历响应?

php - 具有方案路由设置的 Symfony2 无限重定向循环

php - MYSQL 在不同的表中插入相同的值 PHP

PHP mySQL 查询返回单个字段作为 2 元素数组

php - mySQLi_affected_rows 检查不起作用,或者是...?

php & mysql 订阅搜索/匹配查询

javascript - Ajax发帖但对象错误

php - mysql php 时间戳查询

php - 从csv加载数据并忽略基于多列匹配mysql的重复记录

php - 使用 mysqli prepare with ORDER BY 的问题