2012-06-21 55 views
0

我正在嘗試實現動態META信息,以便它可以根據您正在查看的頁面插入META信息。MySQL通過多個表加入

我有3個表

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, 

我想運行一個查詢,允許從站點表中的元信息的人口,如果CATEGORY_META表中不存在的信息。爲了實現這一點,我正在查看存在的「category_url」,並從中搜集「category_id」以運行子查詢。然而,它正在返回一個我不想要的並導致錯誤的空行。

我的查詢是這樣的:

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='?') 

返回:

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

我是比較新的MySQL和任何幫助將不勝感激。

+1

您可能在'cms_sites'上有一個「空」行。 – dmmd

+0

是啊,這就是得到了它,我增加了一個二級WHERE子句找到爲1的ID站點和它解決的問題。謝謝:) – dmurray

+0

不用擔心,很高興幫助:) – dmmd

回答

1

試試這個:

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 = '?' 

無論如何,如果你有一些「空」行作爲@jlcd告訴你,這不會解決你的問題。