CakePHP - SQL Query连接3个表

时间:2014-12-17 20:55:42

标签: php mysql cakephp

我有3张桌子

News(id, year_id, month_id, title, description)其中year_id和month_id是表中的外键

years(id,...)

months(id,...)

分别。

2014 - 2015 - 2016 - 2017

一月

  • 新闻标题1(2014年1月1日)
  • 新闻标题2(2014年1月17日)

二月

  • 新闻标题1(2014年2月5日)
  • 新闻标题2(2014年2月20日)

你可以得到一个想法,首先,我想展示全年的名单(2013年,2014年,2015年),我成功地做到了。

现在我希望在年份列表之下,新闻必须根据月份分组显示(例如,所有1月份的新闻以及#34; 1月和#34;标题等等到2014年12月及以后同样,根据2015年的月份等同样完整的所有新闻集......等等。

我只是想知道是否有任何方法可以通过查询从SQL连接或组中获取所需的结果 或者我将不得不使用编码和简单地从表中获取所有记录而不需要任何查询来管理这100%。

我在谷歌搜索过这个但没有得到解决方案。

只需要一点关于这个......

1 个答案:

答案 0 :(得分:0)

我可能对CakePHP一无所知,我一直想知道为什么你会在monthyear ID' s中分别使用单独的表... 39; ve在评论中询问你并不介意回复。

无论如何,如果你想保留你的数据库结构,只需使用:

SELECT 
    news.title,
    months.name,
    months.day,
    years.year 
FROM news 
JOIN months ON  months.id = news.month_id 
JOIN years ON years.id = news.year_id
ORDER BY
    months.month ASC,
    years.year ASC

我认为这应该做(没有明确检查是否有任何错误但是......这就是这个想法)。 由于我们未使用任何aggregate function,您无法进行分组。

要注意我刚刚接受了yearsmonths的列,因为我不知道你是如何在id之外的那些表中命名其他列的。猜测它只是一个index,但您可以根据需要更换它们

即使我建议删除你的monthsyears表,只要存储月份和年份数,如果你真的想要在News表中,因为你总能输出一个PHP中的月份名称。