【问题标题】:Select from MySQL table while ordering by IDs from another table从 MySQL 表中选择,同时从另一个表中按 ID 排序
【发布时间】:2011-08-04 18:14:44
【问题描述】:

这可能是一件非常简单的事情。如果是这样,我道歉。我还在学习 MySQL。

说,我有两张桌子:

Table1:
`id` int autoincrement primary key
`Name` tinytext
`Phone` tinytext
`Date` etc.

Table2:
`id` int autoincrement primary key
`itmID` int

Table2 中的每一行都指定了从 Table1 中选择元素的顺序。表 2 中的itmID 字段链接到表 1 中的id 字段。

所以现在要从 Table1 中选择元素,我这样做:

SELECT * FROM `Table1`;

但是你如何根据Table2对它们进行排序,像这样?

SELECT * FROM `Table1` ORDER BY <itmID's in Table2> ASC;

【问题讨论】:

    标签: mysql select sql-order-by


    【解决方案1】:

    如果Table1 的所有ID 在Table2 上都有一个条目,则使用INNER JOIN,像这样。

    SELECT * FROM Table1 t1
    INNER JOIN Table2 t2 ON t1.id = t2.itmID
    ORDER BY t2.itmID
    

    如果不是所有人都有条目,则使用LEFT JOIN,如下所示:

    SELECT * FROM Table1 t1
    LEFT JOIN Table2 t2 ON t1.id = t2.itmID
    ORDER BY t2.itmID
    

    【讨论】:

    • 非常好的评论。谢谢!
    【解决方案2】:

    从第一个表中选择,将其连接到第二个,然后按第二个排序。类似的东西

    SELECT * 
    FROM   table1
    LEFT JOIN table 2 on table.id = table2.id
    ORDER by table2.itmID
    

    【讨论】:

    • 正确的想法,但我怀疑 id 是否是合适的连接列,如果它是两个表中的自动增量。
    • 好点 - 通过任何合适的数据加入。如果两个表不能join,就不能这样排序。
    【解决方案3】:

    Ryan 的回答几乎是对的

    SELECT *
    FROM table1
    INNER JOIN table2 on table1.id = table2.itmID
    ORDER BY table2.id
    

    【讨论】:

      【解决方案4】:

      http://dev.mysql.com/doc/refman/5.5/en/join.html

      SELECT * FROM `Table1`
      INNER JOIN `Table2` USING (`id`)
      ORDER BY `Table2`.`itmID` ASC
      

      【讨论】:

        猜你喜欢
        • 2012-03-23
        • 1970-01-01
        • 2016-09-23
        • 2016-11-27
        • 1970-01-01
        • 1970-01-01
        • 2013-12-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多