2012-04-02 30 views
2

私はSQLを使い慣れていないので、私は何をしようとしているのか簡単にしていきます。SQL - SubQuery - SQL構文のエラー

メッセージを選択するには、最新のものから始めて5個までのデータを選択し、最後に最新の「時間」列を並べ替えるシステムがありますそれらを適切に表示する。ここで

は、私が使用している構文です:

SELECT * FROM messages WHERE sender = '$uid' AND reciever = '$new_user_id' 
OR reciever = '$uid' AND sender = '$new_user_id' ORDER BY id ASC 
FROM (SELECT * FROM messages ORDER BY time DESC) 

そして、ここで私が取得していますエラー:あなたのSQL構文でエラーが発生している

。ライン1

で は「(時間DESC BYメッセージORDER SELECT * FROM)から」 近くを使用する権利構文についてはMySQLサーバのバージョンに対応していること取扱説明書を確認し、私は私が何か間違ったことを得ていることを理解しますここでは、SQLは実際に私のものではないので、私はどこに向けるのか分からない。

小さな助けが大きな原因になるだろう、私は何時間も壁に頭を叩いていた。

ありがとうございました。挿入された最後の5つの項目で昇順の時間値を頼るように編集

SELECT * 
    FROM (SELECT * FROM messages ORDER BY time DESC LIMIT 5) 
    WHERE (sender = '$uid' 
    AND reciever = '$new_user_id') 
    OR (reciever = '$uid' 
    AND sender = '$new_user_id') 
    ORDER BY time ASC; 

EDIT

+1

おそらく、あなたは 'FROM'を2回定義しているのでしょうか? – hjpotter92

+0

ちょうどそれを編集しました。私は2番目のFROMの前にORDER BYを逃したようです。 –

+0

あなたはまだ2つの 'FROM'ステートメントを使用しています。クエリをサブパーツに分割してみてください(私の答えで行ったように)、ロジックをよりよく知るのに役立ちます。 ;) – hjpotter92

答えて

0
SELECT * FROM (
    SELECT * 
    FROM messages 
    WHERE 
    (sender = '$uid' AND reciever = '$new_user_id') 
    OR (reciever = '$uid' AND sender = '$new_user_id') 
    ORDER BY time asc 
    LIMIT 5) AS a ORDER by a.time DESC 
+0

素晴らしいです、あなたはそれをそこに持っています。おかげで一人の男:) –

2

はこれを試してみてください。

+0

もう一度クエリをチェックアウトしてもよろしいですか?申し訳ありません。最初のクエリで2つのバージョンのクエリがあったので間違いました。 –

+0

ありがとう、これは私がそれを分類するのに役立ちます! –

0

サブクエリは不要です。サブクエリを取り除き、ORDER BY時間にDESC LIMITを離してください。5.

+0

もう一度クエリをチェックアウトしてもよろしいですか?申し訳ありません最初のクエリで2つのバージョンのクエリがあったので間違いました。 –