Я разрабатываю систему модерации комментариев как часть моего веб-сайта, чтобы я мог видеть список комментариев до их публикации, чтобы я мог либо опубликовать их в порядке, либо удалить их в случае неприемлемости.
У меня есть haofмой SQL работает нормально, где я могу видеть, кто автор комментария, дату публикации, комментарий и т. д. и даже на какой странице он был (будь то страница новостей, блоги или страница событий).
Однако я не могу отобразить заголовок страницы (заголовок новостей, заголовок блога или заголовок события).
Это действительно поможет, поэтому я хотел бы включить его в свой запрос.
Теперь мой запрос работает так, что он выбирает все в таблице комментариев, включая физическую страницу (новости, блоги, события).
Что я представляю, когда узнаю, к какой странице принадлежит комментарий, запросит эту таблицу и получит заголовок.
Кто-нибудь знает, как мне это сделать?Нужна ли мне вложенная выборка после выбора страницы?
Вот мой текущий запрос ($ get_id) получает идентификатор комментария из URL)
SELECT c . * , ifnull( cc.commentcount, 0 ) AS ccount
FROM comments c
LEFT OUTER
JOIN (
SELECT page, pageid, count( * ) AS commentcount
FROM comments
GROUP BY page
) AS cc ON cc.pageid = c.pageid
WHERE c.commentid = '$get_id'
и вот база данныхструктура, если это помогает
CREATE TABLE `comments` (
`commentid` int(5) NOT NULL auto_increment,
`page` varchar(20) NOT NULL default '',
`pageid` int(3) NOT NULL default '0',
`user` varchar(40) NOT NULL default '',
`email` varchar(100) NOT NULL default '',
`website` varchar(100) NOT NULL default '',
`comment` text NOT NULL,
`posted` datetime NOT NULL default '0000-00-00 00:00:00',
`status` enum('0','1') NOT NULL default '0',
PRIMARY KEY (`commentid`)
)
// the tables for news, blogs and events are pretty much the same
CREATE TABLE `news` (
`id` int(4) NOT NULL auto_increment,
`title` varchar(100) NOT NULL default '',
`content` text NOT NULL,
`postdate` date NOT NULL default '0000-00-00',
`photo` varchar(50) NOT NULL default '',
`alternate` varchar(50) NOT NULL default '',
`archived` char(1) NOT NULL default 'n',
`page` varchar(4) NOT NULL default 'news',
PRIMARY KEY (`id`)
)
Я не знаю, помогает ли это, но именно так я отображаю комментарии после публикации
SELECT c.*,
b.title,
ifnull(cc.commentcount,0) as ccount
FROM comments c
INNER
JOIN blogs b
ON c.pageid = b.id
LEFT OUTER
JOIN (SELECT page,pageid,
count(*) as commentcount
FROM comments
GROUP BY page) as cc
on cc.pageid = c.pageid
WHERE c.pageid='$blogid'
РЕДАКТИРОВАТЬ: Текущий запрос с предлагаемыми изменениями из Ain
SELECT c. * , ifnull( cc.commentcount, 0 ) AS ccount,
CASE c.page
WHEN 'news'
THEN SELECT title
FROM news
WHERE id = c.pageid
WHEN 'blog'
THEN SELECT title
FROM blog
WHERE id = c.pageid
ELSE ''
END FROM comments c
LEFT OUTER JOIN (
SELECT page, pageid, count( * ) AS commentcount
FROM comments
GROUP BY page
) AS cc ON cc.pageid = c.pageid
WHERE c.commentid = '2'