Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/300.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用where in条件从表中获取最新的N个记录数_Php_Mysql_Codeigniter_Having Clause - Fatal编程技术网

Php 使用where in条件从表中获取最新的N个记录数

Php 使用where in条件从表中获取最新的N个记录数,php,mysql,codeigniter,having-clause,Php,Mysql,Codeigniter,Having Clause,需要使用WHERE IN条件从与StoreID相关的每个OrderID的表中获取最新的3条记录 例如: -------------------------- orderid storeid 1 2 5 2 7 2 15 5 18 5 25 5 29 9 65 9 78

需要使用WHERE IN条件从与StoreID相关的每个OrderID的表中获取最新的3条记录

例如:

--------------------------
orderid      storeid
1               2
5               2
7               2
15              5
18              5
25              5
29              9
65              9
78              9
------------------------
我的问题是:

SELECT * FROM orders WHERE store_id IN('2', '5', '9') ORDER BY store_id
提前感谢。

使用row\u编号,您可以获得最新的3个OrderID


以下是mysql解决方案,用于为每个存储获取n行数:

SELECT
*
FROM
(
SELECT 
    store_id,
    order_id,
    @curRank := CASE WHEN @prevStore = store_id THEN @curRank + 1 ELSE 0 END AS rank,
    @prevStore:= store_id AS prevStore
FROM orders a, (SELECT @curRank := 0, @prevStore := NULL) r
WHERE store_id IN('2', '5', '9')
ORDER BY 1 desc,2
)a 

WHERE a.rank<3;

我同意你的回答,但他的形象似乎暗示了其他东西:-是的,我想是的。op似乎将此查询转换为orm。latest表示日期/时间?或者别的什么?@M.Hemant order by orderid您可以通过orderid desc的订单来完成这项工作,那么现在是什么阻止了您
SELECT
*
FROM
(
SELECT 
    store_id,
    order_id,
    @curRank := CASE WHEN @prevStore = store_id THEN @curRank + 1 ELSE 0 END AS rank,
    @prevStore:= store_id AS prevStore
FROM orders a, (SELECT @curRank := 0, @prevStore := NULL) r
WHERE store_id IN('2', '5', '9')
ORDER BY 1 desc,2
)a 

WHERE a.rank<3;