2011-05-16 3 views
0

MySQL에서 중첩 된 select에 문제가 있습니다.중첩 SQL 문제

이 하나는 작동하지만 두 개를 가져와야합니다.

예 :

이 하나가 작동
SELECT `a`.`title` , `a`.`askprice` , `a`.`picture` 
, `a`.`description` , `a`.`userid` , `a`.`id` 
FROM (
`mm_ads_fields_values` AS afv 
) 
LEFT JOIN `mm_ads` AS a ON `a`.`id` = `afv`.`aid` 
WHERE `afv`.`value` = '38' 
AND `a`.`category` = '227' 
AND `a`.`status` =1 
AND a.id 
IN (
    SELECT a.id 
    FROM mm_ads AS a 
    LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id 
    WHERE afv.value = '2913' 
) 
ORDER BY `id` DESC 
LIMIT 20 

. 하지만이 같은 SQL 문이 필요합니다 :

SELECT `a`.`title` , `a`.`askprice` , `a`.`picture` 
, `a`.`description` , `a`.`userid` , `a`.`id` 
FROM (
`mm_ads_fields_values` AS afv 
) 
LEFT JOIN `mm_ads` AS a ON `a`.`id` = `afv`.`aid` 
WHERE `afv`.`value` = '38' 
AND `a`.`category` = '227' 
AND `a`.`status` =1 
AND a.id 
IN (
    SELECT a.id 
    FROM mm_ads AS a 
    LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id 
    WHERE afv.value = '2913' 
) 
AND a.id 
IN (
    SELECT a.id 
    FROM mm_ads AS a 
    LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id 
    WHERE afv.value = '51' 
) 
ORDER BY `id` DESC 
LIMIT 20 

그리고 마지막 하나는 작동하지 않습니다. 로딩, 로딩 및 아무 일도 일어나지 않습니다.

내가 뭘 잘못하고 있니?

감사합니다, 마리오 내 나쁜 영어

죄송합니다 ..

+1

원본 질문을 편집하고 'EXPLAIN EXTENDED SELECT ...'출력을 게시 해 주실 수 있습니까? – Pentium10

+0

SQL 문에 대한 원하는 결과 또는 목표를 설명하는 한 문장 또는 두 문장을 제공해 주시겠습니까? 달성하고자하는 것은 무엇입니까? – jsw

답변

0

입심 답변 :해야 문 사용의 두 번째 OR 대신 AND의하지?

... 
AND 
(a.id 
    IN (
    SELECT a.id 
    FROM mm_ads AS a 
    LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id 
    WHERE afv.value = '2913' 
) 
    OR a.id 
    IN (
     SELECT a.id 
     FROM mm_ads AS a 
     LEFT JOIN mm_ads_fields_values AS afv ON afv.aid = a.id 
     WHERE afv.value = '51' 
) 
) 
... 
+0

예제를 시도해 본다면 phpmyadmin이 무한대로로드됩니다. 광고 페이지에서 필터에 대한 SQL 문이 필요합니다. 예를 들어, 자동차를 보았을 때 브랜드, 모델, 유형 등의 필터가 있습니다. BMW를 클릭하고 M3를 선택하면 두 개의 중첩 된 선택이 필요합니까? 대신에 AND가 있어야합니다. 그렇지 않습니까? – Puzo

+0

다른 방법으로 처리하는 방법이 있습니까? – Puzo

+0

첫 번째 쿼리 (작동하는 것)에서'where afv.value = '2913''을'WHERE afv.value = '2913'로 변경하거나 afv.value = '51 '' –