代码之家  ›  专栏  ›  技术社区  ›  AdRock

SQL查询未按预期返回结果

  •  0
  • AdRock  · 技术社区  · 14 年前

    我的查询无法返回任何结果。查询中没有错误,但我希望看到一个结果,但没有任何错误

    这是我的桌子结构

    CREATE TABLE IF NOT EXISTS `boards` (
      `boardid` int(2) NOT NULL auto_increment,
      `boardname` varchar(255) NOT NULL default '',
      `boarddesc` varchar(255) NOT NULL default '',
      PRIMARY KEY  (`boardid`)
    );
    
    CREATE TABLE IF NOT EXISTS `messages` (
      `messageid` int(6) NOT NULL auto_increment,
      `boardid` int(2) NOT NULL default '0',
      `topicid` int(4) NOT NULL default '0',
      `message` text NOT NULL,
      `author` varchar(255) NOT NULL default '',
      `postdate` datetime default NULL,
      PRIMARY KEY  (`messageid`)
    );
    
    CREATE TABLE IF NOT EXISTS `topics` (
      `topicid` int(4) NOT NULL auto_increment,
      `boardid` int(2) NOT NULL default '0',
      `topicname` varchar(255) NOT NULL default '',
      `author` varchar(255) NOT NULL default '',
      `counter` int(5) NOT NULL default '0',
      `sticky` char(1) NOT NULL default 'n',
      `locked` char(1) NOT NULL default 'n',
      PRIMARY KEY  (`topicid`)
    );
    
    CREATE TABLE IF NOT EXISTS `users` (
      `userid` int(25) NOT NULL auto_increment,
      `first_name` varchar(25) NOT NULL default '',
      `email` varchar(255) NOT NULL default '',
      `username` varchar(25) NOT NULL default '',
      `password` varchar(32) NOT NULL default '',
      `salt` char(3) NOT NULL default '',
      `sex` varchar(6) NOT NULL default '',
      `user_level` enum('0','1','2','3') NOT NULL default '0',
      `signup_date` datetime NOT NULL default '0000-00-00 00:00:00',
      `last_login` datetime NOT NULL default '0000-00-00 00:00:00',
      `activated` enum('0','1') NOT NULL default '0',
      PRIMARY KEY  (`userid`)
    )
    

    这是我的问题

    SELECT  b.boardid
            , b.boardname
            , t.topicid
            , t.topicname as topic
            , m.author as mauthor
            , m.message as message
            , DATE_FORMAT(m.postdate, '%M %d, %Y, %r') as postdate
            , tm.post_count as posts
            , u.user_level
            , DATE_FORMAT(signup_date, '%b %Y') as joindate
            , ms.avatar
            , ms.signature
        FROM topics t
    INNER
        JOIN boards b
            ON t.boardid = b.boardid
    INNER 
        JOIN messages m 
            ON t.topicid = m.topicid
    INNER 
        JOIN users u
            ON m.author = u.username
    INNER 
        JOIN misc ms
            ON ms.userid = u.userid
    INNER
        JOIN (SELECT author
                   , COUNT(*) as post_count
                FROM messages
              GROUP
                BY author) as tm
            ON tm.author = m.author
        WHERE t.topicname = 'Honeylands Respite' AND b.boardname = (SELECT boardname FROM boards WHERE boardname='General Chit Chat')
    

    我想是因为我在使用内部连接,也许我应该使用外部连接

    2 回复  |  直到 14 年前
        1
  •  1
  •   user359040    14 年前

    最后一个基于子查询的条件

    b.boardname = (SELECT boardname FROM boards WHERE boardname='General Chit Chat')
    

    可以简化为

    b.boardname = 'General Chit Chat'
    

    一些问题:

    • 你确定“蜜园”这个话题吗? 是否存在喘息?
    • 你确定吗 是否存在“一般聊天”板?
    • 是 你确定那个主题是“蜜园” 船上休息时间 聊天?
    • 你确定有 有关于“蜜园”的消息吗 喘息?
    • 结构是什么(和 表MISC的用途?
    • 应该 联接到表MISC是外部的 加入?
        2
  •  0
  •   JNK    14 年前

    你100%确定你的where子句实际上有一个结果集吗?

    “用户”表的格式是什么?