PHP MySQL, вложенные / потоковые комментарии со страницами, LIMIT 10 OFFSET и т. Д.

Я некоторое время искал ответ и, похоже, не могу его найти, поэтому я надеюсь, что кто-то здесь может помочь... Я просто пытаюсь найти способ показывать только XX комментариев на одной странице, что позволяет процессу вложенных / многопоточных комментариев, и не нужно показывать все комментарии на одной странице, когда пользователь может иметь более 1000 комментариев. Я пытаюсь сделать это с помощью одного запроса MySQL вместо 2, если я Я должен сделать это так, как могу.

Вот моя таблица 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 = идентификатор родительского идентификатора..
Puid = Идентификационный номер пользователя родительского идентификатора
Pseen = если родительский пользователь видел комментарий
seen = если toUid видел комментарий
comment = комментарий, оставленный fromUid
Тим = время () было оставлено
Пид = человек ip

В любом случае, я пытаюсь получить комментарии к профилю пользователя, где они вложены с ответами на предыдущий / родительский комментарий, если они хотят ответить на них.
Я хотел бы ограничить количество комментариев на странице также 10 или 20, в зависимости от того, что я считаю подходящим, и это число также будет включать вложенные комментарии.

например, если я хотел 10 комментариев на странице 1

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)

который я никогда раньше не видел..

спасибо за внимание и помощь, если можете!

1 ответ

Если вы используете подзапрос в IN(), этот подзапрос должен выбрать 1 и только 1 столбец. Ваш выбирает 6.

Кроме того, для этого типа вложенного контента вы можете рассмотреть возможность использования модели вложенного набора.

Другие вопросы по тегам