【发布时间】:2013-12-26 10:23:01
【问题描述】:
我有 2 张桌子 玩家:
| ID | PLAYER | WARNINGS |
|----|--------|----------|
| 1 | a | 35 |
| 2 | b | 70 |
| 3 | c | 65 |
警告:
| ID | PLAYER | POWER | ACTIVE | TIMEEND |
|----|--------|-------|--------|---------------|
| 1 | a | 5 | 1 | 1388051312120 |
| 2 | a | 10 | 1 | 1388051312120 |
| 3 | a | 20 | 1 | 1388051312120 |
| 4 | b | 30 | 1 | 1388051312120 |
| 5 | b | 40 | 1 | 1388051312120 |
| 6 | c | 10 | 1 | 1388051312120 |
| 7 | c | 55 | 1 | 1388051312120 |
我想检查warns 中warns.active=1 的每一行,然后如果warns.timeend <= NOW() 从players.warnings 的players.warnings 中删除(减去)warns.power 并更改warns.active=2
所以之后表格必须如下所示:
玩家:
| ID | PLAYER | WARNINGS |
|----|--------|----------|
| 1 | a | 0 |
| 2 | b | 0 |
| 3 | c | 0 |
警告:
| ID | PLAYER | POWER | ACTIVE | TIMEEND |
|----|--------|-------|--------|---------------|
| 1 | a | 5 | 2 | 1388051312120 |
| 2 | a | 10 | 2 | 1388051312120 |
| 3 | a | 20 | 2 | 1388051312120 |
| 4 | b | 30 | 2 | 1388051312120 |
| 5 | b | 40 | 2 | 1388051312120 |
| 6 | c | 10 | 2 | 1388051312120 |
| 7 | c | 55 | 2 | 1388051312120 |
我只有那个:
UPDATE players,warns SET warns.Active=2, players.Warnings=players.Warnings-warns.Power WHERE (warns.Active=1) AND (warns.TimeEnd <= NOW()) AND (warns.Player=players.Player);
但这给了我:
玩家:
| ID | PLAYER | WARNINGS |
|----|--------|----------|
| 1 | a | 30 |
| 2 | b | 40 |
| 3 | c | 55 |
警告:
| ID | PLAYER | POWER | ACTIVE | TIMEEND |
|----|--------|-------|--------|---------------|
| 1 | a | 5 | 2 | 1388051312120 |
| 2 | a | 10 | 2 | 1388051312120 |
| 3 | a | 20 | 2 | 1388051312120 |
| 4 | b | 30 | 2 | 1388051312120 |
| 5 | b | 40 | 2 | 1388051312120 |
| 6 | c | 10 | 2 | 1388051312120 |
| 7 | c | 55 | 2 | 1388051312120 |
所以只减去每个玩家的第一行... 任何想法如何解决这个问题? 对不起我的英语不好!希望你能理解我:)
【问题讨论】:
标签: mysql sql sql-update inner-join