php - 按条件按列选择行 Mysql

标签 php mysql

好吧,我有一个表 (MYSQL) 'product',其中一个名为 'category_id' 的列存储来自另一个表 'category' 的类别 ID。因此,“category_id”列中有多个类别。例如下表。现在我想从每个类别中选择固定数量的产品(比如 2),例如我想从产品表中的每个类别中选择 2 个最新产品。我应该使用什么 mysql 查询,知道吗?

产品:

+-------------+------+---------------------+
| category_id | name |      timestamp      |
+-------------+------+---------------------+
|           1 | abc  | 2016-02-27 16:04:00 |
|           1 | def  | 2016-02-28 16:10:00 |
|           1 | ghi  | 2016-02-29 16:11:00 |
|           2 | pqr  | 2016-02-27 16:04:00 |
|           2 | stu  | 2016-02-27 16:05:00 |
|           3 | vwx  | 2016-02-28 16:04:00 |
+-------------+------+---------------------+

预期结果:

产品:

+-------------+------+---------------------+
| category_id | name |      timestamp      |
+-------------+------+---------------------+
|           1 | def  | 2016-02-28 16:10:00 |
|           1 | ghi  | 2016-02-29 16:11:00 |
|           2 | pqr  | 2016-02-27 16:04:00 |
|           2 | stu  | 2016-02-27 16:05:00 |
|           3 | vwx  | 2016-02-28 16:04:00 |
+-------------+------+---------------------+

最佳答案

它可能对你有帮助...

检查 SQL Fiddle 链接中的输出:http://sqlfiddle.com/#!9/3942d2/6

SELECT
    category_id,
    name,
    tsDate
FROM
(
    SELECT
        category_id,
        name,
        tsDate,
        @rn := IF(@prev = category_id, @rn + 1, 1) AS rn,
        @prev := category_id
    FROM Product
    JOIN (SELECT @prev := NULL, @rn := 0) AS vars
    ORDER BY category_id, tsDate DESC, name
) AS T1
WHERE rn <= 2

关于php - 按条件按列选择行 Mysql,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35829573/

相关文章:

PHP:在函数内与 global 关键字一起使用时,全局变量将无法按预期工作

php - 在事务中使用last_insert_id进行多次插入

mysql - Laravel MySQL 如何按照与 whereIn 子句中相同的顺序对结果进行排序

mysql - 创建了一个 mysql 数据库,但似乎无法在任何地方找到它

php - mysql 选择变量设置位置

php - 覆盖 laravel Blade 模板中的部分抛出 undefined variable 错误

php - 在php中设置新用户后无法访问我的网页

javascript - 在 facebox 中打开表单操作...(php href 和表单操作)

php - Android 从 php 获取 json 数据显示错误....!

php - ajax-PHP-MySQL 是聊天室应用程序的良好组合吗?