首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用COALESCE返回带有导航数组页面信息的元标题值

问使用COALESCE返回带有导航数组页面信息的元标题值
EN

Stack Overflow用户
提问于 2012-11-28 05:59:02
回答 2查看 57关注 0票数 1

我正在创建一个带有codeigniter的多站点CMS,并且在查询导航链接时遇到了问题。每个页面都可以有元值,这些元值可以用特定于站点的元值覆盖默认的(location_id = 0)。我有两个表cms_pages和cms_page_meta来存储信息。以下是相关数据

代码语言:javascript
复制
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)的标题值存在,则我只想要特定位置,否则为通用,否则为空

代码语言:javascript
复制
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次点击,所以速度是有帮助的,但还不是必须的……

我更改了上面的查询,现在它只获取通用数据。任何帮助都是非常感谢的!

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-11-28 06:11:35

我认为你应该使用这样的东西:

代码语言:javascript
复制
SELECT
  cms_page.*,
  COALESCE(cms_pm2.meta_id, cms_pm1.meta_id) as meta_id,
  COALESCE(cms_pm2.tag_name, cms_pm1.tag_name) as tag_name,
  COALESCE(cms_pm2.tag_value, cms_pm1.tag_value) as tag_value
FROM
  cms_pages LEFT JOIN cms_page_meta cms_pm1
  ON cms_pm1.page_id = cms_pages.page_id
     AND cms_pm1.location_id = 0
  LEFT JOIN cms_page_meta cms_pm2
  ON cms_pm2.page_id = cms_pages.page_id
     AND cms_pm2.location_id = x      
ORDER BY cms_pages.page_order
票数 0
EN

Stack Overflow用户

发布于 2012-11-28 06:12:11

我想我找到了一个解决方案

代码语言:javascript
复制
SELECT cms_pages.*, coalesce(s.tag_value, g.tag_value, 'Coming Soon!') as tag_value
from cms_pages
left join cms_page_meta s on ad_pages.page_id = s.page_id and s.tag_name = "title" and s.location_id = 255
left join cms_page_meta g on ad_pages.page_id = g.page_id and g.tag_name = "title" and g.location_id = 0
WHERE `cms_pages`.`page_group_id` =  '5'
AND `page_type` =  1
ORDER BY `cms_pages`.`page_order`

这在性能方面是好的吗?

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13593897

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档