如何在MySQL中基于其他字段设置自动增量字段?

时间:2017-09-29 07:00:40

标签: mysql

我有一个登录日志表,它已经将id(自动增量)定义为主键!但抓住每个用户数据非常困难。让我们看看下面的表格演示。

+----+------+--------+
| id | uid  | money  |
+----+------+--------+
|  1 |  101 | 200.00 |
|  2 |  101 | 100.00 |
|  3 |  102 | 300.00 |
|  4 |  102 | 500.00 |
+----+------+--------+

假设我们需要用户最新的7天记录,我们必须通过uid进行过滤并对其进行排序!所以我想重新设计一个像下面结构的表:

+----+---+------+-------+
| id |pid|uid  | money  |
+----+---+------+-------+
|  1 | 1 | 101 | 200.00 |
|  2 | 2 | 101 | 100.00 |
|  3 | 1 | 102 | 300.00 |
|  4 | 3 | 101 | 300.00 |
|  5 | 2 | 102 | 500.00 |
+----+---+-----+--------+

我只想根据uid设置自动增量。例如,如果我们已经在桌面上有商店101,则pid将增加1,否则设置1.我如何达到这个目标?

2 个答案:

答案 0 :(得分:1)

如何使用现有结构为您提供所需结果的视图

select a.*,
(
  select count(*)
  from demo b 
  where a.uid = b.uid
  and a.id > b.id
) + 1 pid
from demo a
order by a.id

DEMO

答案 1 :(得分:0)

您是否尝试过使用索引,而不是这个复杂的想法。

试试此链接What is an index in SQL?

如果你按照自己的想法去做。您需要首先查询表以确定记录是否已存在。如果是,则获取其最后一个pid。然后插入记录机智pid + 1.这在数据库服务器上有巨大的开销和多个IO操作。这最终会减慢整个系统的速度。