【发布时间】:2013-11-04 09:56:20
【问题描述】:
我有一个品牌表和帖子表。
下面是他们的架构
品牌:
brands_id,友好,简短,追随者,创建,位置,brandID, 处理,网址,图片,utcOffset,帖子,约定,参与用户, 等(足够当前问题)
帖子:
post_id、brandID、postID、handle、posted、content、postType、cmets、 等(足以满足当前问题)
其中 postType= 链接、状态、视频、问题、投票等
现在我已经使用以下查询对旋转进行了硬编码:
select b.friendly,
sum(case when p.postType='link' then 1 else 0 end) as 'link',
sum(case when p.postType='video' then 1 else 0 end) as 'video',
sum(case when p.postType='status' then 1 else 0 end) as 'status',
sum(case when p.postType='photo' then 1 else 0 end) as 'photo',
count(p.postType)
from brands b, posts p
where b.handle
in ('chevroletcanada','dodgecanada')
and p.handle=b.handle
and date(p.posted)
BETWEEN "2013-06-02" and "2013-08-11"
group by b.friendly
但在上面的查询中,我静态地使用了 postType 类型,即用于链接、状态、视频、照片。现在,如果将新的 postType 添加到 posts 表中,这将不起作用,因为我也必须更改查询。此外,如果 postType 中的现有值被删除,则也必须再次更改查询。
我的问题是如何动态实现这一点,以便在帖子表中添加新的 postType 值(例如 tweet)时,tweet 也会显示在结果集中。删除任何 postType 也是如此。
如果你不明白的问题,请告诉我。
我已阅读以下帖子,但无法弄清楚:
MySQL or PHP Turning rows into columns dynamically
MySQL pivot table query with dynamic columns
提前致谢!!
【问题讨论】:
-
你不能用 MySQL 用一个查询来做到这一点。
-
@TomMac 没问题。如果我使用子查询或连接来完成这项工作,那很好
-
只需组装一个 GROUPed 和 ORDERed 结果并在应用程序级别处理显示逻辑(例如一点 PHP)。你也可以使用 sproc,但我不喜欢这个主意。
标签: php mysql database dynamic pivot