У меня есть две таблицы MySQL, 'section' и 'pages'.
Я пытаюсь использовать один запрос для извлечения данных из одной или обеих таблиц.
Еслираздел и страница существуют, оператор AND работает нормально.
Если раздел и страница не существуют, то оператор AND также подходит.
Однако я не могу найти способ вытащитьиз таблицы разделов, если страница не существует (проблема оператора AND) в сочетании с URL-адресами index.php (извлекает все страницы index.php для сайта).
Я пытаюсь написать более качественные запросы, чтобыВот мои цели и то, что я пытался:
Я не хочу тянуть все страницы, которые соответствуют разделу, а затем повторять их.
Я не хочу тратить ресурсы на выполнениевторой запрос, если это можно сделать в одном запросе.
В настоящее время у меня есть два, если условные запросы (только один будет выполняться для данной загрузки страницы), поскольку страницы с URL-адресом «index.php» будут извлекать всеразделы.
Я использовалFROM в сочетании с таблицей разделов, хотя я также пытался использовать LEFT JOIN для таблицы страниц.
Это работает для страниц, которые не являются индексами:
(SELECT NULL AS meta_description FROM sections WHERE url = 'example')
UNION
(SELECT meta_description FROM pages WHERE url = 'something');
Этот запрос возвращаетсяв две строки и с ним достаточно просто работать.
Раздел и страница существуют, возвращает результат:
SELECT *
FROM sections AS cs
LEFT JOIN pages AS cp ON (cp.id_section = cs.id)
WHERE cs.section_url LIKE BINARY 'section_url' AND cp.url LIKE BINARY 'index.php'
Раздел существует, страница отсутствует, возвращает 0 строк...
SELECT *
FROM sections AS cs
LEFT JOIN pages AS cp ON (cp.id_section = cs.id)
WHERE cs.section_url LIKE BINARY 'section_url' AND cp.url LIKE BINARY 'not_exist'
Структура таблицы:
страниц : id, section_id, meta_description, meta_language, meta_robots, title, url
section : id, section_id, meta_description, meta_language, meta_robots, title, url
Самое главное, я хочу убедиться, что синтаксис нейтрален к SQL, так как я планирую со временем перейти с MySQL на PostgreSQL.