【问题标题】:mysql query select from multiple, order by datemysql查询从多个中选择,按日期排序
【发布时间】:2012-02-10 14:33:04
【问题描述】:

从多个表中选择并按日期从最新到最旧对所有内容进行排序有什么好的简单方法?

 mysql_query("
               SELECT * 
               FROM posts, comments, photos 
               WHERE userID='$session' 
               ORDER BY date");

如果我想做这样的事情。

【问题讨论】:

  • 请举一个例子,包括表格的结构和你想要达到的结果的例子。

标签: php mysql join union multiple-tables


【解决方案1】:
SELECT *
FROM (SELECT userID, Col1, Col2, Col3, date
      FROM posts
      UNION
      SELECT userID, Col1, Col2, Col3, date
      FROM comments
      SELECT userID, Col1, Col2, Col3, date
      FROM photos ) t
WHERE userID = 123
ORDER BY date DESC

【讨论】:

    【解决方案2】:

    使用 ORDER BY 或 LIMIT 子句对整个 UNION 进行排序或限制 结果,将各个 SELECT 语句括起来,并将 最后一个之后的 ORDER BY 或 LIMIT。以下示例同时使用 子句:

    (SELECT a FROM t1 WHERE a=10 AND B=1) UNION 
    (SELECT a FROM t2 WHERE a=11 AND B=2) 
    ORDER BY a LIMIT 10;
    

    不带括号的语句等价于带括号的语句 刚刚显示。

    这种 ORDER BY 不能使用包含 表名(即 tbl_name.col_name 格式的名称)。反而, 在第一个 SELECT 语句中提供一个列别名并参考 ORDER BY 中的别名。 (或者,请参阅 ORDER BY 使用其列位置。但是,使用列位置 已弃用。)

    ->http://dev.mysql.com/doc/refman/5.0/en/union.html

    【讨论】:

      【解决方案3】:

      您现有的查询不会满足您的要求。相反,您需要在某个公共列上 JOIN 您的表格:

      SELECT
        posts.*,
        comments.*,
        photos.*
      FROM 
        posts JOIN comments ON posts.post_id = comments.post_id
        JOIN photos ON posts.post_id = photos.post_id
      ORDER BY posts.date DESC
      

      请注意,通常建议在生产代码中使用SELECT *SELECT posts.*。通常最好明确列出您想要的列,这样您就可以确定它们到达的顺序(例如,这对于 UNION 查询很重要)以及您的架构是否发生变化。

      SELECT
        posts.date,
        posts.post_id,
        posts.title,
        posts.etc,
        comments.date,
        comments.user,
        comments.text,
        photos.title
      FROM
        posts JOIN comments ON posts.post_id = comments.post_id
        JOIN photos ON posts.post_id = photos.post_id
      
      /* Also, if multiple tables have a `date` column, you'll need to specify which one
         as in `posts`.`date` */
      ORDER BY posts.date DESC
      

      【讨论】:

      • 谢谢,是的(上面的查询只是一个模糊的示例,说明将使用哪些信息,但谢谢)
      猜你喜欢
      • 1970-01-01
      • 2017-08-05
      • 1970-01-01
      • 2014-01-11
      • 2021-01-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多