2010-03-22 14 views
2

가입 추가 :A와 세 번째 테이블이 쿼리는 잘 작동

$sqlStr = "SELECT s.loginid, s.title, s.url, s.displayurl, l.username 
      FROM submission AS s, 
        login AS l 
      WHERE s.loginid = l.loginid 
     ORDER BY s.datesubmitted DESC 
      LIMIT 10"; 

내가 제 3 MySQL의 테이블에 가입하기를 원한다면이 작품은 여기에 ("코멘트"라고 함)시겠습니까? 당신은 정말 사용해야 미리

$sqlStr = "SELECT s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username, count(c.comment) countComments 
      FROM submission AS s, 
        login AS l, 
        comment AS c, 
      WHERE s.loginid = l.loginid 
       AND s.submissionid = c.submissionid 
     ORDER BY s.datesubmitted DESC 
      LIMIT 10"; 

감사합니다,

답변

3

는 더 분명하다, 조인과 당신의 where 절에서 당신의 가입 조건을 유지합니다. 당신이 제 3 테이블을 추가 할 때 또한, 더 일관된 :

다음은 명시 적 조인 구문을 사용하여, 원래 코드 : 당신은 세 번째 테이블을 추가 할 경우,

SELECT  s.loginid, s.title, s.url, s.displayurl, l.username 
FROM  submission s 
INNER JOIN login l ON l.loginid = s.loginid 
ORDER BY s.datesubmitted DESC 
LIMIT  10 

를, 그것은 쉽게 :

SELECT  s.loginid, s.title, s.url, s.displayurl, l.username 
FROM  submission s 
INNER JOIN login l ON l.loginid = s.loginid 
INNER JOIN comment c ON s.submissionid = c.submissionid 
ORDER BY s.datesubmitted DESC 
LIMIT  10 

또한 트릭입니다. 거의

INNER JOIN login l USING (loginid) 
INNER JOIN comment c USING(submissionid) 
1

: 당신이 경우에 가입 같은 이름 인 두 개의 열, 당신은 USING 구문을 사용할 수 있습니다.

세 번째 테이블에 대한 구문이 정확합니다 (이전 스타일이지만 암시 적 조인을 사용함).

하지만 COUNT (c.comment) 작업을 수행하려면 (또는 MySQL이 특정 구문에서 느슨하기 때문에 "꼭해야한다"라고 말해야합니다) GROUP BY 절을 선택 항목에 추가해야합니다.

SELECT s.loginid, s.submissionid s.title, s.url, 
     s.displayurl, l.username, count(c.comment) AS countComments 
FROM submission AS s, 
    login AS l, 
    comment AS c, 
WHERE s.loginid = l.loginid AND s.submissionid = c.submissionid 
GROUP BY s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username 
ORDER BY s.datesubmitted DESC 
LIMIT 10 
0

당신은 거기에 하나 개 이상의 필드 (아래 예에서 그냥은 loginid을 설정 한)와 GROUP BY 절을 추가해야 할뿐만 아니라 것이다 : 그 절은 SELECT의 다른 모든 열 이름을 지정해야 거기에서 COUNT() 함수를 사용하면 SQL은 다음과 같이됩니다.

$sqlStr = "SELECT s.loginid, s.submissionid s.title, s.url, s.displayurl, l.username, count(c.comment) countComments 
      FROM submission AS s, 
        login AS l, 
        comment AS c 
      WHERE s.loginid = l.loginid 
       AND s.submissionid = c.submissionid 
     GROUP BY s.loginid 
     ORDER BY s.datesubmitted DESC 
      LIMIT 10"; 
관련 문제