最初,我需要构建一个查询,从一个按最新sites (articles放在单独表中的日期)排序的表中提取articles。
我构建了以下查询:
SELECT *
FROM `sites`
INNER JOIN `articles` ON `articles`.`site_id` = `sites`.`id`
ORDER BY `articles`.`date` DESC
GROUP BY `sites`.`id`我假设SELECT和INNER JOIN将获取所有的帖子,并将一个站点关联到每个站点,而ORDER BY将通过降低发布日期来排序结果,而GROUP BY将对每个站点进行第一次发布,而我将得到所需的结果。
但是我收到了#1064 - You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'GROUP BYsites.idLIMIT 0, 30' at line 7的MySQL错误
如果我将GROUP BY 放在 ORDER BY语句之前,则查询工作正常,但它不会为每个站点提供最新的帖子。相反,结果将在分组之后()排序,这不是我所需要的(实际上,我更愿意在分组后以另一种方式订购)。
我读到了几个非常相似的问题,但它们都与存储在一个表中的数据有关,因此可以使用MAX和MIN函数。
我应该做些什么来实现我所需要的?
发布于 2014-10-29 09:04:59
最后我找到了解决办法。
首先,我将主查询从sites表更改为articles查询。接下来,我将MAX(date)列添加到结果中。
因此,实现所需内容的结果查询如下:
SELECT `sites`.`url`,MAX(`articles`.`date`) AS `last_article_date`
FROM `articles`
INNER JOIN `sites` ON `sites`.`id` = `article`.`site_id`
GROUP BY `site_id`
ORDER BY `last_article_date` ASC感谢你们给我提示和正确的搜索方向!
发布于 2014-10-28 17:30:34
您可以使用子查询/派生表/内联视图或自排除连接,例如:
SELECT s.*, a1.*
FROM `sites` s
INNER JOIN `articles` a1 ON a1.`site_id` = s.`id`
LEFT OUTER JOIN `articles` a2 ON a2.`site_id` = a1.`site_id`
AND a2.`date` > a1.`date`
WHERE
a2.`site_id` IS NULL
ORDER BY
a1.`date` DESC原则是,您选择的网站的文章日期不大于任何其他文章日期。
发布于 2014-10-28 17:01:00
将sql重写为以下语法-
SELECT `articles`.`article_name`,'sites'.'id','articles'.'site_id'
FROM `sites`,'articles'
WHERE `articles`.`site_id` = `sites`.`id`
ORDER BY 'sites'.'id', `articles`.`date` DESC;
在select语句中这样做。按函数分组要求对所有字段进行分组。因此,不可能使用*。
https://stackoverflow.com/questions/26613882
复制相似问题