php - 需要有关评论审核的 SQL 查询帮助

标签 php mysql select inner-join outer-join

我正在开发一个评论审核系统,作为我网站的一部分,这样我就可以在评论发布之前看到评论列表,这样我就可以正常发布它们,或者在不合适的情况下删除它们。

我的 SQL 工作正常,我可以看到评论的作者是谁、发布日期、评论等,甚至是它所在的页面(无论是新闻页面、博客还是事件页面) .

但是我无法让它显示页面标题(新闻标题、博客标题或事件标题)。

这确实很有帮助,所以我希望将其合并到我的查询中。

我的查询现在的工作方式是,它选择评论表中的所有内容,包括物理页面(新闻、博客、事件)。

我想象它要做的是一旦知道评论属于哪个页面,就查询该表并获取标题。

有人知道我该怎么做吗?选择页面后是否需要嵌套选择?

这是我当前的查询($get_id)从网址获取评论 ID)

   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'

最佳答案

我假设绑定(bind)(外键或枚举值)是 news.'page'、blogs.'page' 等字段。因此,对每种类型的条目执行 LEFT JOIN 应该做到这一点,并从所有具有专用名称(“AS”约定)的“页面”字段中获取数据,并以编程方式检查该“页面”条目是否为 NULL。其中非空包含您要查找的条目。

SELECT c . * ,n.`title` as `newstitle`, b.`title` as `blogstitle`, e.`title` as `eventstitle`, 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
    LEFT JOIN 'news' n ON n.'pageid' = c.'pageid'
    LEFT JOIN 'blogs' b ON b.'pageid' = c.'pageid'
    LEFT JOIN 'events' e ON e.'pageid' = c.'pageid'
    WHERE c.commentid = '$get_id'

关于php - 需要有关评论审核的 SQL 查询帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6799603/

相关文章:

php - Doctrine 2 : how to auto-get data of related tables?

php - 我如何删除 bootstrap 3 中这些图像之间的空白

sql - 在 SQL 中使用两个 DISTINCT 语句

mysql - AS 多选

php - Wordpress - 如何将绝对链接更改为相对链接

php - 在 Ajax 调用中传递包含空格的值

mysql - MDX 相当于 SQL 查询

php - 通过 1 个按钮显示多个结果

mysql - 未捕获的异常 'PDOException',消息为“SQLSTATE[22007] : Invalid datetime format: 1366 Incorrect string value

sockets - 解决套接字问题并选择