从多个表中选择并按日期从最新到最旧排序的简单好方法是什么?
 mysql_query("
               SELECT * 
               FROM posts, comments, photos 
               WHERE userID='$session' 
               ORDER BY date");如果我想做这样的事。
发布于 2012-01-15 08:47:20
若要使用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中引用该别名。(或者,通过使用其列位置按顺序引用该列。但是,不推荐使用列位置。)
-> http://dev.mysql.com/doc/refman/5.0/en/union.html
发布于 2012-01-15 08:44:37
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发布于 2012-01-15 08:44:05
您现有的查询不会执行您想要的操作。相反,您需要在一些公共列上对表执行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 DESChttps://stackoverflow.com/questions/8866662
复制相似问题