0

Drupal 6を使用して、私の目標は、Facebookがコメントを出力する方法と同様のスレッドコメントのセットを注文することです。下部にあります。

これがcomment_order_NEWEST_FIRSTによる順序付けのcomment_renderからのSQLクエリです。

SELECT c.cid as cid, c.pid, c.nid,
c.subject, c.comment, c.format,
c.timestamp, c.name, c.mail,
c.homepage, u.uid, u.name AS
registered_name, u.signature,
u.picture, u.data, c.thread, c.status
FROM {comments} c INNER JOIN {users} u
ON c.uid = u.uid WHERE c.nid = 141737
AND c.status = 0 ORDER BY c.thread
DESC

これにより、最新のスレッドから順に並べられたすべてのコメントが返されます。

03/
03.00/
02/
02.06/
02.05/
02.04/
02.03/
02.01/
02.00/
01/

私の場合の望ましい順序は次のとおりです。

03/
03.00/
02/
02.00/
02.01/
02.02/
02.03/
02.04/
02.05/
02.06/
01/

もう一度Facebookの壁について考えてみれば、そのアイデアが浮かびます。

誰かがSQLクエリを適切に拡張するのを手伝うことができますか?私の場合(すべての場合ではないかもしれませんが)、カスタムモジュールを介してスレッドの深さを強制的に1に制限します。

もう1つの注意-私の場合、MySQLでのみ機能する必要があります。

4

1 に答える 1

0

このクエリは機能しますが、やはり私は SQL 初心者なので、これはおそらく完全には正しくありません。

c.cid を cid、c.pid、c.nid、c.subject、c.comment、c.format、c.timestamp、c.name、c.mail、c.homepage、u.uid、u.name として選択AS registered_name, u.signature, u.picture, u.data, c.thread, c.status FROM (SELECT c.cid as cid, c.pid, c.nid, c.subject, c.comment, c.format 、c.timestamp、c.name、c.mail、c.homepage、u.uid、u.name AS registered_name、u.signature、u.picture、u.data、c.thread、c.status FROM commentsc INNER JOIN usersu ON c.uid = u.uid WHERE c.nid = 141737 AND c.status = 0 ORDER BY SUBSTRING(thread, 1, (LENGTH(thread) - 1))) c INNER JOIN usersu ON c.uid = u. uid WHERE c.nid = 141737 AND c.status = 0 ORDER BY SUBSTRING(thread, 1, 2) DESC

アイデアは、最初に完全なスレッド (02.05 など) に基づいた順序でクエリを実行し、次にスレッド フィールドの最初の 2 文字だけで別の SELECT を実行することです。これを最適化するための助けを得ることができますか、それとも「正しい」ですか?

于 2010-10-04T06:09:35.993 に答える