2012-06-21 7 views
0

J'essaie d'obtenir des informations META dynamiques afin que les informations META puissent être insérées en fonction de la page que vous consultez.MySQL Rejoindre plusieurs tables

I Have 3 tables

CATEGORIES 
    category_id, 
    category_name, 
    category_title, 
    category_url, 
    site_id, 

SITE 
    site_id, 
    site_name, 
    site_url, 
    meta_kw, 
    meta_desc, 

CATEGORY_META 
    site_id, 
    category_id, 
    meta_keywords, 
    meta_description, 

Je suis en train d'exécuter une requête qui permet à la population des informations META de la table du SITE si aucune information existe à l'intérieur de la table de CATEGORY_META. Pour ce faire, je regarde le "category_url" qui existe et glanant le "category_id" de cela pour lancer une sous-requête. Cependant, il retourne une ligne vide que je ne veux pas et provoque des erreurs.

Ma requête ressemble à ceci:

SELECT category_id, s.meta_kw, s.meta_desc, m.meta_keywords, m.meta_description 
FROM cms_sites s 
LEFT JOIN cms_category_meta m 
ON s.site_id=m.site_id AND m.category_id = 
(SELECT category_id FROM cms_categories WHERE category_url='?') 

qui retourne:

|category_id |meta_kw |meta_Desc | meta_keywords |meta_description | 
|NULL   |kw  |desc  |NULL   |NULL    | 
|NULL   |   |   |NULL   |NULL    | 

Je suis relativement nouveau à MySQL et toute aide serait grandement appréciée.

+1

Vous avez probablement une ligne "vide" sur 'cms_sites'. – dmmd

+0

Yup, c'est tout, j'ai ajouté une clause WHERE secondaire pour trouver des sites avec un ID de 1 et cela a résolu le problème. Merci :) – dmurray

+0

Pas de soucis, content que ça a aidé :) – dmmd

Répondre

1

Essayez ceci:

SELECT 
    category_id, s.meta_kw, s.meta_desc, m.meta_keywords, m.meta_description 
FROM cms_sites s 
LEFT JOIN cms_category_meta m ON s.site_id = m.site_id 
LEFT JOIN cms_categories cat ON m.category_id = cat.category_id 
          AND cat.category_url = '?' 

Quoi qu'il en soit, si vous avez un « vide » ligne comme @jlcd vous a dit, ce ne sera pas vous résoudre le problème.