什麼是從多個表中進行選擇並按照日期排序,從最新到最舊的一切的簡單方法?mysql查詢從多個查詢中選擇,按日期排序
mysql_query("
SELECT *
FROM posts, comments, photos
WHERE userID='$session'
ORDER BY date");
如果我想做那樣的事情。
什麼是從多個表中進行選擇並按照日期排序,從最新到最舊的一切的簡單方法?mysql查詢從多個查詢中選擇,按日期排序
mysql_query("
SELECT *
FROM posts, comments, photos
WHERE userID='$session'
ORDER BY date");
如果我想做那樣的事情。
要使用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中引用 別名。 (可替換地,參考在 順序的列通過使用其柱位置。然而,使用柱的位置 已被棄用。)
你現有的查詢不會做你想要的。相反,你需要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
謝謝,是的(上面的查詢只是一個模糊的例子,將使用哪些信息,但謝謝) – 2012-01-15 00:49:00
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
請給包括表的結構的示例,並且你試圖達到的結果的一個例子。 – Paker 2012-01-15 00:44:44