首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >mysql查询select from multiple,order by date

mysql查询select from multiple,order by date
EN

Stack Overflow用户
提问于 2012-01-15 08:41:11
回答 3查看 2.7K关注 0票数 1

从多个表中选择并按日期从最新到最旧排序的简单好方法是什么?

代码语言:javascript
运行
复制
 mysql_query("
               SELECT * 
               FROM posts, comments, photos 
               WHERE userID='$session' 
               ORDER BY date");

如果我想做这样的事。

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-15 08:47:20

若要使用ORDER BY或LIMIT子句对整个UNION结果进行排序或限制,请将各个SELECT语句括起来,并将ORDER BY或limit置于最后一个语句之后。下面的示例使用这两个子句:

代码语言:javascript
运行
复制
(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中引用该别名。(或者,通过使用其列位置按顺序引用该列。但是,不推荐使用列位置。)

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

票数 1
EN

Stack Overflow用户

发布于 2012-01-15 08:44:37

代码语言:javascript
运行
复制
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
票数 5
EN

Stack Overflow用户

发布于 2012-01-15 08:44:05

您现有的查询不会执行您想要的操作。相反,您需要在一些公共列上对表执行JOIN操作:

代码语言:javascript
运行
复制
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查询很重要),并且可以确定您的模式是否发生了变化。

代码语言:javascript
运行
复制
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
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8866662

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档