基本上我有2张桌子.users和users_activity.我使用mysql表并且用户数几乎达到5000.每个用户都有很多活动,大约有50-150个活动.当我想要获取用户列表表(十点十分)时,我必须显示用户的上一个活动日期.在这种情况下,我有两个选择:
第一选择:
我将列添加last_activity到users表中并选择如下:
SELECT * FROM users ORDER BY id DESC, lIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)
如果我想添加新活动:
INSERT INTO users_activity (userId, date) VALUES(19, "2016-04-06")
UPDATE users SET last_activity = "2016-04-06" WHERE id = 19 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
如果我想取消last_activity:
DELETE FROM users_activity WHERE activity_id = 100 LIMIT 1
SELECT date FROM users_activity WHERE userId = 19 ORDER BY DESC LIMIT 1
Run Code Online (Sandbox Code Playgroud)
使用此选择,我能够获取最后一个日期FROM users_activity表并在更新sql中使用它.
UPDATE users SET last_activity = "2016-04-02" WHERE id = 19 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
第二种选择:
我last_activity从users表中删除列并选择如下:
SELECT
users.*,
users_activity.date
FROM
users
LEFT JOIN
users_activity ON users_activity.userId = users.id
GROUP BY users.id
ORDER BY
users.id DESC, users_activity.date DESC
LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)
如果我想添加新活动:
INSERT INTO users_activity (userId, date) VALUES(19, "2016-04-06")
Run Code Online (Sandbox Code Playgroud)
如果我想取消last_activity:
DELETE FROM users_activity WHERE activity_id = 100 LIMIT 1
Run Code Online (Sandbox Code Playgroud)
我用的是Mysql.两张桌子都是innoDB.
在这种情况下,你会以哪种方式推荐我?为什么?
小智 1
首先我想说你的插入语句语法是错误的。因为 insert 语句不能与 where 子句一起使用。如果我理解正确的话,您想显示用户的信息及其最后操作日期。如果您的表索引良好,您可以执行下一个查询:
SELECT u.*, a.action_date FROM users u
LEFT JOIN users_activity a ON a.userId = u.userId
GROUP BY a.userId
ORDER BY a.action_date desc
LIMIT 0, 10
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
110 次 |
| 最近记录: |