我有一个登录日志表,它已经将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.我如何达到这个目标?
答案 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
答案 1 :(得分:0)
您是否尝试过使用索引,而不是这个复杂的想法。
如果你按照自己的想法去做。您需要首先查询表以确定记录是否已存在。如果是,则获取其最后一个pid。然后插入记录机智pid + 1.这在数据库服务器上有巨大的开销和多个IO操作。这最终会减慢整个系统的速度。