加入 MySQL 查询结果
Posted
技术标签:
【中文标题】加入 MySQL 查询结果【英文标题】:Joining MySQL query results 【发布时间】:2013-12-14 03:12:09 【问题描述】:又一个question I've made before。我想扩展正在查询的表的数量。
情况是:
假设我有 3 个数据库表:
-
教师,具有以下字段:
身份证
姓名
主题,具有以下字段:
身份证
姓名
teachers_subjects,具有以下字段:
teacher_id
subject_id
所以,一些老师有共同的学科。
我考虑过查询的算法:
对于subjects表中的每条记录:
选择 Teachers_subjects 表中的计数。 如果计数大于 1 在teacher_subjects中,获取subject_id为s的teacher_id's。
建立关系对。
我需要得到如下输出:
+----------+----------+-----------------------+----------------------------+
| Teacher1 | Teacher2 | NumberOfRelationships | SubjectsInCommon |
+----------+----------+-----------------------+----------------------------+
| Ian | Ralph | 4 | Math, Science, English, PE |
| Anna | Maria | 2 | Math, Trigonometry |
+----------+----------+-----------------------+----------------------------+
所以我在这个 sql 查询中得到了答案:
SELECT @rownum := @rownum + 1 as id, relations.Teacher1, relations.Teacher2, relations.subjects, relations.count
FROM (SELECT t1.name as 'Teacher1', t2.name as 'Teacher2', GROUP_CONCAT(s.name) AS subjects, count(*) AS count
FROM teachers t1
JOIN teachers t2 ON t1.id > t2.id
JOIN teachers_subjects ts1 ON ts1.teacher_id = t1.id
JOIN teachers_subjects ts2 ON ts2.teacher_id = t2.id AND ts1.subject_id = ts2.subject_id
JOIN subjects s ON ts1.subject_id = s.id
GROUP BY ts1.teacher_id, ts2.teacher_id) as relations,
(SELECT @rownum := 0) r;
但是如果我有更多的表格,例如:
-
教师,具有以下字段:
身份证
姓名
主题,具有以下字段:
身份证
姓名
teachers_subjects,具有以下字段:
teacher_id
subject_id
项目,具有以下字段:
project_id
姓名
projects_subjects,具有以下字段:
teacher_id
project_id
reasearches,包含以下字段:
research_id
姓名
researches_subjects,包含以下字段:
teacher_id
project_id
我想得到如下输出:
+----------+----------+-------------------------+--------------------+
| Teacher1 | Teacher2 | NumOfTotalRelationships | ActivitiesInCommon |
+----------+----------+-------------------------+--------------------+
| | | | |
+----------+----------+-------------------------+--------------------+
如果我以后需要添加更多表格怎么办,无论如何它可以用于 n 表格?
【问题讨论】:
您需要动态查询,可能是通过从某些表中选择所有表名和列。我知道在 SP 和触发器中使用动态 SQL 存在问题,在您的服务器端脚本中这样做会更容易。 【参考方案1】:您可以尝试为低级关系创建视图。然后你可以加入视图以获得任何关系。
【讨论】:
你能举个例子吗?以上是关于加入 MySQL 查询结果的主要内容,如果未能解决你的问题,请参考以下文章