2012-12-26 1 views
48

를 포함해야합니다, 내 프로젝트에서 다음 쿼리를 사용하려고 내가 PDO를 사용하고 있기 때문에 코드. 2는 ": cat"에 유효한 값입니다. 즉, 쿼리하지만 나에게 오류를 제공MySQL은 내가 만드는거야 시스템에서 작업하는 동안 피연산자 1 개 컬럼 (들)

는 "# 1241 - 피연산자가 1 열 (들)을 포함해야한다"

은 무엇 그루터기 나 내가이 쿼리는 아무 문제가 작동하지 않을 것이라고 생각한다는 것입니다. 열을 선택한 다음 다른 테이블에서 두 개를 선택하고 거기에서 계속하십시오. 나는 그 문제가 무엇인지 알 수 없다.

간단한 수정 또는 내 검색어를 쓰는 다른 방법이 있습니까?

답변

57

. 이 컨텍스트에서는 이러한 쿼리에서 하나의 열만 선택할 수 있습니다.

users 테이블에 대신 참여하는 것이 좋습니다. 이렇게하면 users에서 원하는 열을 선택할 때 더 많은 유연성을 얻을 수 있습니다.

SELECT 
topics.id, 
topics.name, 
topics.post_count, 
topics.view_count, 
COUNT(posts.solved_post) AS solved_post, 
users.username AS posted_by, 
users.id AS posted_by_id 

FROM topics 

LEFT OUTER JOIN posts ON posts.topic_id = topics.id 
LEFT OUTER JOIN users ON users.id = posts.posted_by 

WHERE topics.cat_id = :cat 
GROUP BY topics.id 
+0

응답 해 주셔서 감사합니다. 내 쿼리를 수정하고 답변으로 표시 하겠지만 입력에 대해서는 지금 사용하고있는 것보다 내 쿼리를 작성하는 "더 나은"방법이 있다고 생각합니까 (또한 오류를 무시함)? –

+0

아. 원본 게시물을 수정 해 주셔서 감사합니다. StackOverflow를 사용하면 답변으로 표시해야합니다. 고마워요! –

+0

음,'COUNT()'는 약간의 일을 던지고 있습니다; 내가 제공 한 쿼리는 아마 집계로 인해 오류를 줄 것입니다. 쿼리의 목표에 따라 하위 쿼리로 해당 집계를 이동해야 할 수도 있습니다 (현재 나에게 명확하지 않음). – cdhowie

5
COUNT(posts.solved_post) AS solved_post, 
(SELECT users.username AS posted_by, 
    users.id AS posted_by_id 
    FROM users 
    WHERE users.id = posts.posted_by) 

음, 하나의 하위 쿼리에서 여러 개의 열을 가져올 수 없습니다. 운 좋게도 두 번째 열은 이미 posts.posted_by입니다! 그래서 :

당신은 (외부 SELECT 조항의 일부로서) 하나의 열을 프로젝트에 사용하는 동안 귀하의 하위 쿼리는 두 개의 열을 선택하는 것입니다
SELECT 
topics.id, 
topics.name, 
topics.post_count, 
topics.view_count, 
posts.posted_by 
COUNT(posts.solved_post) AS solved_post, 
(SELECT users.username AS posted_by_username 
    FROM users 
    WHERE users.id = posts.posted_by) 
... 
6

실수로 JOINON 절에 쉼표 대신 AND를 사용하는 경우이 오류가 발생할 수 있습니다 실수로 '='대신 사용의 경우

JOIN joined_table ON (joined_table.column = table.column, joined_table.column2 = table.column2) 
                 ^
              should be AND, not a comma 
1

이 오류가 발생할 수 있습니다 '의 WHERE 절에서 예를 들어

:

WHERE product_id = (1,2,3); 
+1

또는 IN 대신에 IN을 사용하면이 오류가 발생하는 이유를 찾을 수 없습니다. 포인터에 대한 ty. –