2011-03-08 3 views
0

MySQL에 4 개의 테이블이 있습니다. 예mysql select 문에서 4 개의 테이블을 조인하려면 어떻게해야합니까?

$select = $db->query("SELECT * 
         FROM ads 
         WHERE ad_pic='1' 
         AND ad_status = '1' 
        ORDER BY ad_id DESC LIMIT 0,4"); 

while ($fetch = $db->fetch($select)) { 

    $iquery = $db->query("SELECT * 
          FROM images 
          WHERE img_ads_id = '" . intval($fetch['ad_id']) . "' 
          AND img_status = '1' 
          LIMIT 1"); 
    $thumb = $db->fetch($iquery); 

    $uselect = $db->query("SELECT * 
          FROM users 
          WHERE user_id = '".intval($fetch['ad_userid'])."' 
           AND user_status = '1' 
          LIMIT 1"); 
    $ufetch = $db->fetch($uselect); 

    $cselect = $db->query("SELECT * 
          FROM category 
          WHERE cat_slug = '".safe_func($fetch['ad_category'])."' 
          LIMIT 1"); 
    $cfetch = $db->fetch($cselect);   

} 

하나의 select 문에서 이러한 항목을 결합하는 방법을 알고 싶습니다.


ads table 

ad_id ad_userid ad_category 
------------------------------- 
1  2   5 

images table 

img_id img_ads_id 
------------------------------- 
1  1   

users table 

user_id  user_name 
------------------------------- 
2   John 

category table 

cat_id cat_name 
------------------------------- 
5  Vehicles  
+2

가입하려는 4 개의 테이블과 관련된 스키마 부분을 제공 할 수 있습니까? –

+0

광고와 이미지간에 일대일 관계가 있습니까? 광고와 사용자간에? 광고와 카테고리간에? (나는 추측하고있다.) –

+0

브라이언이 묻자, 우리에게 완전한 스키마를 제공하라. 각각의 테이블에있는 외래 키와 개인 키를 알고 이들이 어떻게 관련되어 있는지 알아야합니다. – coder

답변

9
SELECT * 
FROM ads AS a 
LEFT JOIN images AS i ON i.img_ads_id = a.ad_id AND i.img_status = 1 
LEFT JOIN users AS u ON u.id = a.ad_userid AND u.user_status = 1 
LEFT JOIN category AS c ON c.cat_slug = a.ad_category 
WHERE a.ad_pic = 1 
AND a.ad_status = 1 
ORDER BY a.ad_id DESC 
LIMIT 0,4 

광고 이미지, 사용자 또는 범주를 사용해야하는 경우, 당신은 대신 LEFT의 가입 사용할 수는 가입하세요. 광고에 이미지, 사용자 또는 카테고리가 둘 이상있을 수있는 경우 더 복잡한 검색어가 필요합니다.

+0

감사합니다 패트릭 피셔 :) – haha

관련 문제