2012-05-13 4 views
0

내 SQL 문은 그MySQL의 쿼리 문제 : 당신이 id로 서로 관련 theese 테이블을 참조로

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q 
    , subjects AS sb 
    , sections AS sc 
    , chapters AS c 
    , paragraphs AS p 
WHERE (sb.id=q.subject AND c.id=q.chapter AND sc.id=q.section AND p.id=q.paragraph) AND (q.author_id=1) 
ORDER BY q.id asc 
LIMIT 0, 25 

과 같은 다른 테이블에서 열을 선택할 수 없습니다. 문제는 subject 테이블 대신 subject 테이블의 subjects 테이블의 테이블을 얻는 것입니다. 내가 여기서 무엇을 놓치고 있니?

참고

예제를 예제로 제공했습니다. 실제로 AS sc, AS c 장, AS p 단락 모두 작동하지 않습니다. 나는 단지 주제를 얻고있다.

+0

그건 MySQL에 심각한 결함이 있다는 뜻입니다. 실제 * 진술을 복사 했습니까? –

+0

@epic_syntax : 누군가가 MySQL에 뭔가 잘못했다고 주장하는 시간의 99.9 %는 실제로 뭔가 잘못하고있는 프로그래머였습니다. 나는 당신이 * MySQL에서 이상한 버그를 발견하지 못했다고 말하지는 않는다. - 확실히 가능하다. 그러나 실제로 그것은 어리석은 실수를 한 것 같다. MySQL에 실제로 버그가 있다고 100 % 확신하는 경우, 실제로 버그인지 확인하기 위해 사용하는 예제 데이터를 게시하십시오. –

+0

위와 같이 -이 두 테이블에 제목 열이있는 경우 첫 번째 질문은 "이유"가 될 수 있지만 두 테이블 모두 동일한 주제를 가질 수 있습니까? – GDP

답변

1

나는 보통 JOIN 구문을 명시 적으로 사용합니다. 이렇게하면 문제를 추적하는 데 도움이되는 더 나은 오류 출력이 제공됩니다.

차이점을 쉽게 볼 수 있도록 형식이 지정된 원본은 다음과 같습니다.

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q, 
    subjects AS sb, 
    sections AS sc, 
    chapters AS c, 
    paragraphs AS p 
WHERE (sb.id=q.subject 
     AND c.id=q.chapter 
     AND sc.id=q.section 
     AND p.id=q.paragraph) 
     AND (q.author_id=1) 
ORDER BY q.id asc 
LIMIT 0, 25 

그리고 여기에 편집 된 버전입니다 - 테이블이 절을 ON으로 테이블 이름 목록까지 이동 한 함께 후크 방법을 정의하는 WHERE 절 매개 변수를 확인할 수 있습니다. INNER JOIN 구문의 일부로 다음과 같습니다. INNER JOIN ON.

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q 
    INNER JOIN subjects AS sb ON sb.id = q.subject 
    INNER JOIN sections AS sc ON sc.id = q.section 
    INNER JOIN chapters AS c ON c.id = q.chapter 
    INNER JOIN paragraphs AS p ON p.id = q.paragraph 
WHERE (q.author_id=1) 
ORDER BY q.id asc 
LIMIT 0, 25 

MySQL을 직접 실행하려고하면 어떻게됩니까?

+0

내 결과 : http://screencast.com/t/hG2I9AUrboDc 내 결과 : http://screencast.com/t/aFf27Scr 및 db 구조 http://i.stack.imgur.com/45IOR.png – heron

+0

죄송합니다 - 불필요한 쉼표. 지금 수정되었습니다. 다시 시도 하시겠습니까? –

+0

시도했습니다. 내 것과 같은 결과 :)) – heron

2

분명히 당신의 문제의 쿼리는 괜찮지 만, 여전히 대신 문을 사용하여 그것을 밖으로 파고 subjects_subject에 열까지 오는 것을보고이 도움이

SELECT SQL_CALC_FOUND_ROWS q.id, q.question, sb.subject as subjects_subject, c.chapter, sc.section, p.paragraph 
FROM questions AS q 
    , subjects AS sb 
    , sections AS sc 
    , chapters AS c 
    , paragraphs AS p 
WHERE (sb.id=q.subject AND c.id=q.chapter AND sc.id=q.section AND p.id=q.paragraph) AND (q.author_id=1) 
ORDER BY q.id asc 
LIMIT 0, 25 

희망을.

+0

예를 들어 주제를 제공했습니다. 실제로 AS sc, AS c 장, AS p 단락 모두 작동하지 않습니다. 나는 단지 주제를 얻고있다. – heron

+1

@epic_syntax - 그게 문제의 일부입니다. 실제 진술을 게시하는 것이 아니라 문제가있는 부분에 게시합니다. –

+0

@epic_syntax 그런 다음 문제가 쿼리에 없습니다 ... 다른 것은 잘못되었습니다 ... DB 구조 또는 PHP 함수에 대해 설명 할 수 있습니까? – AlphaMale