2010-07-22 151 views
0

我遇到问题而没有返回任何结果。有查询中没有任何错误,但我希望看到的结果,我没有得到任何SQL查询在预期时没有返回结果

这里是我的表结构

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') 

我认为这是监守我使用内部连接,也许我应该使用外连接

+0

也许它的一个贫穷的注释,但不是你需要外键链接表?... – bAN 2010-07-22 10:04:21

回答

1

最后基于子查询条件

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

可以简化为

b.boardname = 'General Chit Chat' 

一些问题:

  • 你确定主题 'Honeylands 喘息' 的存在?
  • 您确定 董事会'一般的闲聊'存在吗?
  • 是 您确定主题'Honeylands 喘息'在船上'General Chit Chat'?
  • 你肯定有 任何消息上的主题“Honeylands 喘息”?
  • 什么是表misc的结构(和 的目的)?
  • 应该 联接表杂项是外部 加入?
+0

我得到它的工作....我想这是一个PHP错误,而不是SQL – AdRock 2010-07-23 13:40:00

0

你100%确保您的WHERE子句实际上有一个结果集?

表'用户'的表格格式是什么?

+0

添加的用户表,是应该有与数据记录 – AdRock 2010-07-22 10:12:30