複数のテーブルから選択し、最新のものから古いものまですべてを順序付けるのは良い方法ですか?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");
もし私がそういったことをしたいならば。
個々のSELECTステートメントを括弧と最後の後 BY ORDERまたはLIMITを置き、全体UNION 結果をソートしたり制限する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
ありがとうございました(上記のクエリは情報が使用される曖昧な例でしたが、感謝しています) –
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