2010-07-22 9 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') 

I입니다 그것은 내부 조인을 사용하고 아마도 외부 조인을 사용해야합니다 becuase라고 생각합니다

+0

아마 그 가난한 코멘트하지만 당신은 테이블을 연결하는 외래 키가 필요하지 않습니다? ... – bAN

답변

1

마지막 하위 쿼리 기반 조건

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

b.boardname = 'General Chit Chat' 

몇 가지 질문에 간단하게 할 수 있습니다

  • 당신이 'Honeylands 위탁은'존재 그 주제 확실합니까?
  • 보드 '일반 Chit Chat'이 있습니까?
  • 'Honeylands 휴식 프로그램'에 '일반 Chit 채팅'이라는 주제가 포함되어 있습니까?
  • 주제가 'Honeylands 휴식'에 관한 메시지가 이겠습니까?
  • 테이블 misc의 구조 (및 )는 무엇입니까?
  • 테이블에 대한 조인은 외부 번호 에 참여합니까?
+0

나는 그것이 작동있어 .... 내가 생각 그것은 PHP 오류가 아니 었어 SQL – AdRock

0

WHERE 절에 결과 집합이 실제로 있는지 100 % 확실합니까?

'사용자'테이블의 형식은 무엇입니까?

+0

추가 된 사용자 테이블과 네 데이터와 기록이 있어야한다 – AdRock

관련 문제