CakePHP - 用于连接 3 个表的 SQL 查询


CakePHP - SQL Query to join 3 tables

>我有 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(,我成功地做到了。

现在我希望在该年份列表下方,新闻必须根据月份分组显示(例如,在"一月"标题下显示一月的所有新闻,依此类推,直到 2014 年 12 月及以下,同样完整的所有新闻集根据 2015 年的月份等等......

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

我已经在谷歌上搜索了这个,但没有得到解决方案。

只需要一点关于这个的想法.....

我可能对CakePHP一无所知,我一直想知道为什么你会有单独的表,monthyear ID的..正如我在评论中问的那样,你不介意回复。

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

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 中输出月份的名称。