【发布时间】:2011-09-27 19:39:24
【问题描述】:
简单地说,我如何计算某行之前有多少行。我使用的是增量 ID,但行是随机删除的,因此仅检查 ID 是什么是行不通的。
如果我有 30 行,并且我根据名称(或其他任何东西)选择了一个,那么在该行之前有多少行?它可以是 16、1、12 或任何值。
我正在使用 MySQL 和 CodeIgniter。
【问题讨论】:
标签: php mysql sql codeigniter
简单地说,我如何计算某行之前有多少行。我使用的是增量 ID,但行是随机删除的,因此仅检查 ID 是什么是行不通的。
如果我有 30 行,并且我根据名称(或其他任何东西)选择了一个,那么在该行之前有多少行?它可以是 16、1、12 或任何值。
我正在使用 MySQL 和 CodeIgniter。
【问题讨论】:
标签: php mysql sql codeigniter
在您的模型上:
$id = $this->db->get('users')->where("name", "John")->id;
$rows = $this->db->get('users')->where("id < ", $id)->num_rows();
return $rows;
请注意我是如何使用“链式方法”的,为此您需要 PHP5,这是 CI 2 的默认设置。
您首先需要获取记录的 ID,您需要开始“向后”计数,这是第一行,考虑一个名为 users 的表,并且您要过滤的列是“name”,而您要查找的行具有 John 的 name 值。
第二行将为您提供查询“where id number”返回的行数,其中 number 是您从第一个查询中获得的 ID。也许你甚至可以把两条线都链接起来。
【讨论】:
假设它是一个 auto_increment 列,删除的行将不会被再次填充,所以这应该可以完成工作。
SELECT COUNT(*) FROM table WHERE id_column < your_selected_row_id;
【讨论】:
我假设您的主键列的数据类型为整数
SELECT COUNT(*) FROM `table`
WHERE id < (SELECT id FROM `table` WHERE `conditions are met for specific row`)
【讨论】: