我正在使用 codeigniter 创建一个多站点 CMS,并且在查询导航链接时遇到问题。(location_id = 0)
每个页面都可以具有元值,如果设置了特定于站点的元值,则这些元值会覆盖默认值。我有两个表cms_pages
并cms_page_meta
存储信息。下面是相关数据
Table cms_pages
page_id
Table cms_page_meta
meta_id
location_id
page_id
tag_name
tag_value
如果可行,我想一次性完成。
这是我正在使用的调用,如果所有位置的标题值都存在,它会导致页面被列出两次,如果存在我只想要(location_id = 0)
特定(location_id = x)
位置的特定位置,否则它是通用的,否则为 NULL
SELECT cms_page.*, cms_page_meta.tag_value
FROM cms_pages
LEFT JOIN cms_page_meta ON cms_page_meta.page_id = cms_pages.page_id
WHERE cms_page_meta.location_id IN (0, x)
ORDER BY cms_pages.page_order`
我很确定我应该使用 coalesce 但只是不知道如何实现它。我是否试图一次做太多事情?我应该使用 PHP array_merge 拆分调用和处理吗?我想避免这种情况,因为每当我对页面或元数据进行更改时,我都可以缓存调用并删除/重新生成缓存。服务器每天获得约 10,000 次点击,因此速度很有帮助,但还没有必要......
我更改了上面的查询,所以它现在只获取通用数据。任何帮助是极大的赞赏!