0

私はしばらくの間答えを探していましたが、答えが見つからないようです..私はここの誰かが助けてくれることを願っています.ネストされた/スレッド化されたコメントの、およびユーザーが1,000を超えるコメントを持っている可能性がある場合、1つのページにすべてのコメントを表示する必要はありません..私が私ができるようにそれをしなければなりません。

これが私のMySQLテーブルです(まだリリースされていない新しいテーブルなので、必要に応じて変更できます)

CREATE TABLE IF NOT EXISTS `comments_threaded` (
`id` bigint(255) NOT NULL AUTO_INCREMENT,
`toUid` bigint(255) NOT NULL,
`fromUid` bigint(255) NOT NULL,
`Pid` bigint(255) NOT NULL,
`Puid` bigint(255) NOT NULL,
`Pseen` int(2) NOT NULL,
`seen` int(2) NOT NULL,
`comment` text NOT NULL,
`tim` int(20) NOT NULL,
`Pip` varchar(30) NOT NULL,
PRIMARY KEY (`id`),
KEY `toUid` (`toUid`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 ;

id = 自動増加したコメントの id
toUid = 対象のプロファイル/ユーザー
fromUid = コメントの送信者
Pid = 親 id の id..
Puid = 親 id のユーザー id 番号
Pseen = 親の場合ユーザーがコメントを見た見た
= toUid がコメントを見た場合コメント = fromUid が残したコメント tim = 残された時間
Pid = 人の ip


とにかく、ユーザープロファイルにコメントを付けようとしています。そこでは、返信したい場合は、前の/親のコメントへの返信でネストされています。
ページ上のコメントの量も 10 または 20 に制限したいと思います。この数には、ネストされたコメントも含まれます。

たとえば、ページ 1 に 10 個のコメントが必要な場合

comment 1
--comment 2 replied to comment 1
--comment 3 replied to comment 1
----comment 4 replied to comment 3
------comment 5 replied to comment 4
comment 6
--comment 7 replied to comment 6
--comment 8 replied to comment 6
comment 9
--comment 10 replied to comment 9

次に、2 ページ目で、最初のコメントが別のコメントへの返信である場合、そのページに 10 個のコメントしか保持できない場合は、返信された元の親コメントから開始します。追加のコメントを上部に表示するか、1 ページ目の下部に追加のコメントを表示しても問題ありません。どちらが簡単かはわかりません。

comment 9
--comment 10 replied to comment 9
----comment 11 replied to comment 10
----comment 12 replied to comment 10
--comment 13 replied to comment 12
comment 13
comment 14
--comment 15 replied to comment 14
--comment 16 replied to comment 14
----comment 17 replied to comment 16
----comment 18 replied to comment 17
--comment 19 replied to comment 17
comment 20

MySQL の IN 句でこれができると思っていましたが、エラーが発生しました.." 試してみました -

SELECT id, fromUid, Pseen, seen, comment, tim 
FROM comments_threaded 
WHERE toUid = '".mysql_real_escape_string($toUid)."' 
    OR Pid IN (
        SELECT id, fromUid, Pseen, seen, comment, tim 
        FROM comments_threaded 
        WHERE toUid = '".mysql_real_escape_string($toUid)."'
    ) 
LIMIT 10

そして得ている

Operand should contain 1 column(s)

今まで見たことがない..

ご覧いただきありがとうございます。

4

1 に答える 1

2

でサブクエリを使用する場合IN()、そのサブクエリは 1 つの列のみを選択する必要があります。あなたは6を選択しています。

また、この種のネストされたコンテンツについては、ネストされたセット モデルの使用を検討することをお勧めします。

于 2012-06-07T06:45:01.773 に答える