2012-06-21 2 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, 

Я пытаюсь выполнить запрос, который позволяет для населения META информации из таблицы SITE, если информация не существует в таблице 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

Yup, thats получил его, я добавил вторичное предложение WHERE, чтобы найти сайты с идентификатором 1, и он решил проблему. Спасибо :) – 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 сказал вам, это не решит проблему вам.

Смежные вопросы