0

次の MySQL クエリを使用して、チャット ログの最新の 20 件のメッセージにアクセスし、順序を逆にして、最新のメッセージが最後に画面に出力されるようにしています。

SELECT * 
FROM 
    (
        SELECT
            messageID,
            posterID,
            messageTime,
            message
        FROM
            chat_messages
        /* Subquery is used to get the most recent 20 by messageTime */
        ORDER BY 
            messageTime DESC
        LIMIT 20
    ) subq
/* Reorder the result of the subquery to put them back into ascending order */
ORDER BY 
    messageTime ASC

それはうまくいきます。問題は、チャット機能にグループを追加しようとしていることです。これを行う際に、「グループ」と呼ばれるテーブル chat_messages にさらに列を追加しました。メインのチャット ログはグループ 0 であるため、上記のクエリを変更して、メインのチャット ログからのメッセージのみにアクセスする必要があります。これは私が立ち往生しているところです。MySQL では、サブクエリ内に where 句を追加できないようです。私は次のことを試しましたが、うまくいきませんでした:

SELECT * 
FROM 
    (
        SELECT
            messageID,
            posterID,
            messageTime,
            message
        FROM
            chat_messages
        WHERE
            group = '0'
        /* Subquery is used to get the most recent 20 by messageTime */
        ORDER BY 
            messageTime DESC
        LIMIT 20
    ) subq
/* Reorder the result of the subquery to put them back into ascending order */
ORDER BY 
    messageTime ASC

次のエラー メッセージが表示されます (58 行目はクエリの次の行です)。

警告: mysql_num_rows() は、パラメーター 1 がリソースであると想定しており、58 行目の xxxxxxx で指定されたブール値です。

このスレッドに書かれていることに従って、次のことを試しましたが、これも機能しませんでした。

SELECT * 
FROM 
    (
        SELECT
                (
                    SELECT
                        messageID,
                        posterID,
                        messageTime,
                        message
                    FROM
                        chat_messages
                    WHERE
                        group = '0'
                )
        FROM
            chat_messages
        /* Subquery is used to get the most recent 20 by messageTime */
        ORDER BY 
            messageTime DESC
        LIMIT 20
    ) subq
/* Reorder the result of the subquery to put them back into ascending order */
ORDER BY 
    messageTime ASC

グループ 0 からのメッセージのみにアクセスするクエリを作成するにはどうすればよいですか? 私はそれがどのように機能していないのか理解していませんか?

ありがとう、
ジョー

4

2 に答える 2

1

GROUPは MySQL の予約語です。バッククォートで囲みます`

SELECT * 
FROM 
(
     SELECT messageID,
          posterID,
          messageTime,
          message
     FROM chat_messages
     WHERE `group` = '0'
        /* Subquery is used to get the most recent 20 by messageTime */
     ORDER BY  messageTime DESC
     LIMIT 20
 ) subq
/* Reorder the result of the subquery to put them back into ascending order */
ORDER BY  messageTime ASC
于 2012-08-23T12:00:50.280 に答える
0

サブクエリを使用する理由がわかりません。最初の選択は、順序が逆であることを除いて、2 番目の選択と似ています。MySQL に ORDER 句を使用してクエリを実行すると、正しく順序付けされることがわかります。次のようなテーブル (チャット) 構造があるとします。ポスター ID | messagetTime | メッセージ | グループ | [その他のフィールド]、次のように選択できます。

SELECT messageID, posterId, messageTime, message FROM chat WHERE `group` = [number] ORDER BY messageTIME DESC LIMIT 20

これにより、最新の 20 件のメッセージが表示されます。@bluefeet が言ったように、GROUP は予約語であり、バッククォートを使用する必要があります。

于 2012-08-23T12:06:40.153 に答える