MySQL加入多个表

时间:2012-06-21 09:44:59

标签: php mysql left-join

我正在尝试实现动态META信息,以便根据您正在查看的页面插入META信息。

我有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表中没有信息,我正在尝试运行一个允许来自SITE表的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 个答案:

答案 0 :(得分: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告诉你有一些“空”行,这不会解决你的问题。