我有两个MySQL表,'sections'和'pages'。
我正在尝试使用单个查询来从一个或两个表中获取数据。
如果部分和页面存在,则AND运算符正常工作。
如果部分和页面不存在,那么AND运算符也可以。
但是,如果页面不存在(AND运算符问题)和index.php urls(拉取站点的所有index.php页面),我似乎无法找到从section表中提取的方法。 / p>
我正在尝试编写更好的查询,所以这是我的目标和我尝试的内容:
我不想拉出与该部分匹配的所有页面,然后迭代它们。
如果可以在单个查询中完成,我不想在执行第二个查询时浪费资源。
我目前有两个if条件查询(只有一个将针对给定的页面加载执行),因为带有'index.php'URL的页面将为所有部分提取。
我已经将FROM与sections表结合使用了,虽然我也在页面表上尝试了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
部分:id,section_id,meta_description,meta_language,meta_robots,title,url
最重要的是,我希望确保语法是SQL中性的,因为我计划最终从MySQL迁移到PostgreSQL。
答案 0 :(得分:2)
主要猜测,因为我不确定你想要实现的完全,但试试这个:
SELECT *
FROM sections AS cs
LEFT JOIN pages AS cp ON (cp.id_section = cs.id AND cp.url LIKE BINARY 'not exists')
WHERE cs.section_url LIKE BINARY 'section_url'