MySQL从3个关系表中为每个产品选择N个最新的行
现在我有了返回每个产品最新记录的代码。但我不知道如何修改它以获得例如每个产品的3个最新行。 我想比较最新的产品价格,我需要每个最新的几行 商店 产品 价格 对于特定shopId的products表中的每个产品,此命令仅从prices表中返回1条最新记录 例如,如果shopId=1,则此命令仅获取我在此处省略的记录,即检索到的其他表中的数据:MySQL从3个关系表中为每个产品选择N个最新的行,mysql,Mysql,现在我有了返回每个产品最新记录的代码。但我不知道如何修改它以获得例如每个产品的3个最新行。 我想比较最新的产品价格,我需要每个最新的几行 商店 产品 价格 对于特定shopId的products表中的每个产品,此命令仅从prices表中返回1条最新记录 例如,如果shopId=1,则此命令仅获取我在此处省略的记录,即检索到的其他表中的数据: 230 | 1 | 18 | 2137 | 2021-03-11 05:55:25 232 | 1 | 20
230 | 1 | 18 | 2137 | 2021-03-11 05:55:25
232 | 1 | 20 | 5001 | 2021-03-11 20:18:01
但我想获得shopId=1的每个产品的2条最新记录,因此我想获得的记录:
(shops)id | (shops)shopId | title | active | price | dDateAdded
1 | 2345 | Honda | 1 | 2256 | 2021-03-10 18:22:13
1 | 2345 | Honda | 1 | 2137 | 2021-03-10 14:15:56
1 | 2345 | VW | 1 | 5321 | 2021-03-11 05:55:25
1 | 2345 | VW | 1 | 5001 | 2021-03-11 20:18:01
要选择N个最新的行,需要分配行号并按N行进行筛选。但是,MySQL 5.7中不支持ROW_NUMBER函数。 因此,您需要模拟行数函数,如下所示: 通过向查询中添加行号为的子查询,可以获得所需的结果,如下所示: 选择 s、 身份证, s、 肖皮德, c、 头衔, c、 活跃的, d、 价格, d、 添加 从商店里买来的 在c.shopId=s.id上以c的形式左键连接产品 d.productId=c.id和d.shopId=s.id上的左连接价格为d - 左连接 选择 p1.id, COUNTp2.ddatadded+1行\u num 从价格p1向左连接价格p2 在p1.shopId=p2.shopId和 p1.productId=p2.productId和 p1.ddatedded
id | shopId | productId | price | dDateAdded
-----------------------------------------------------
224 | 1 | 18 | 2385 | 2021-03-09 12:39:57
225 | 2 | 19 | 1523 | 2021-03-09 13:14:44
226 | 1 | 20 | 5489 | 2021-03-09 17:32:18
227 | 1 | 18 | 2256 | 2021-03-10 18:22:13
228 | 2 | 19 | 1600 | 2021-03-10 21:33:21
229 | 1 | 20 | 5321 | 2021-03-10 14:15:56
230 | 1 | 18 | 2137 | 2021-03-11 05:55:25
231 | 2 | 19 | 1666 | 2021-03-11 17:31:49
232 | 1 | 20 | 5001 | 2021-03-11 20:18:01
SELECT s.*, c.*, d.*
FROM shops AS s
LEFT JOIN products AS c ON c.shopId = s.id
LEFT JOIN (
SELECT productId, MAX(dDateAdded) MaxDate
FROM prices
GROUP BY productId
) MaxDates
ON MaxDates.productId = c.id
LEFT JOIN prices AS d ON d.productId = c.id AND d.shopId = s.id AND MaxDates.MaxDate = d.dDateAdded
WHERE s.id = ".$shopId."
230 | 1 | 18 | 2137 | 2021-03-11 05:55:25
232 | 1 | 20 | 5001 | 2021-03-11 20:18:01
(shops)id | (shops)shopId | title | active | price | dDateAdded
1 | 2345 | Honda | 1 | 2256 | 2021-03-10 18:22:13
1 | 2345 | Honda | 1 | 2137 | 2021-03-10 14:15:56
1 | 2345 | VW | 1 | 5321 | 2021-03-11 05:55:25
1 | 2345 | VW | 1 | 5001 | 2021-03-11 20:18:01