次の 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 からのメッセージのみにアクセスするクエリを作成するにはどうすればよいですか? 私はそれがどのように機能していないのか理解していませんか?
ありがとう、
ジョー