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.
Кроме того, для этого типа вложенного контента вы можете рассмотреть возможность использования модели вложенного набора.