2013-04-07 52 views
1

我基本上想通过外键的条目列来排序特定的查询结果。下面是我的表:mySQL ORDER BY using FOREIGN KEYS

class 
------ 
classId 
profId //Points to a profId from professor table 
courseId //Points to a specific courseId from course table 
semId  //Points to a specific semId from semester table 

professor 
--------- 
profId 
first //first name 
last //last name 

course 
------ 
courseId 
department //The `CMSC` in CMSC101 
number //The `101` in CMSC101 
title  

semester 
-------- 
semId 
season //example: Spring, Summer, Fall 
year 

我希望他们能够hierarchally有序,而且通过在类列的列的外键。所以,我SELECT全部来自class条目和顺序进行排序:

  1. 课程 - >部门
  2. 课程 - >数字
  3. 课程 - >部分
  4. 教授 - >最后
  5. 教授 - >第一
  6. 学期 - >年
  7. 学期 - >赛季

回答

2

啊,这比以前发布的问题更有意义。您首先需要加入所有的表连接在一起,那么你可以进行排序:

SELECT 
    Course.Department, 
    Course.Number, 
    Course.Section, 
    Professor.Last, 
    Professor.First, 
    Semester.Year, 
    Semester.Season 
FROM Class 
INNER JOIN Course ON Class.CourseID = Course.CourseID 
INNER JOIN Professor ON Class.ProfID = Professor.ProfID 
INNER JOIN Semester ON Class.SemID = Semester.SemID 
ORDER BY 
    Course.Department, 
    Course.Number, 
    Course.Section, 
    Professor.Last, 
    Professor.First, 
    Semester.Year, 
    Semester.Season 

列别是在SELECT列表让你通过它们进行排序,但在大多数情况下,它是有道理的把他们包括在内。

+0

这是一个相当简单的'SELECT',所以首先要从文档[这里](http://dev.mysql.com/doc/refman/5.0/en/select.html )。如果上面的查询有一个特定部分,那么您很难理解,请让我知道,我会尽力解释。 – 2013-04-07 01:33:27

+0

是否可以添加'WHERE professor.last ='Smith''并缩小该查询的范围,以仅显示名为“Smith”的教授的班级? – 2013-04-07 03:24:16

+0

当然。你的语法是正确的;只是把它放在'INNER JOIN'和'ORDER BY'之前。 – 2013-04-07 04:11:10

-1

假设所有表上的一个连接,为什么不

ORDER BY COL1,COL2,......科隆

当您执行加入,你将有机会获得所有列在每个连接表。示例: http://sqlfiddle.com/#!2/30e14/1