2011-03-08 3 views
0

J'ai 4 tables à MySQL à rejoindre. ExempleComment joindre 4 tables sur mysql select statement?

$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);   

} 

Je veux savoir comment les joindre dans une instruction 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

pouvez-vous nous donner la partie du schéma qui est pertinente pour les quatre tables que vous souhaitez rejoindre? –

+0

Y a-t-il des relations 1 à 1 entre les annonces et les images? Entre les annonces et les utilisateurs? Entre les annonces et les catégories? (Je devine oui.) –

+0

comme Brian a demandé, donnez-nous un schéma complet. besoin de connaître les clés étrangères et les clés privées dans chacune de ces tables pour savoir comment elles sont liées. – coder

Répondre

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 

Si une annonce doit avoir une image, l'utilisateur, ou d'une catégorie, vous pouvez utiliser JOIN au lieu d'un LEFT JOIN. Si une annonce peut avoir plusieurs images, utilisateurs ou catégories, vous aurez besoin d'une requête plus complexe.

+0

Merci Patrick Fisher :) – haha