我有一个通过PHP脚本输入数据的表,并使用phpMyAdmin对其进行管理。我的表有4列。第一个是自动递增,第二个和第三个是输入的值,最后一个是跟踪第三列中的值出现的次数。
这就是我的表当前的显示方式
RowNumber UserID SongID Plays
1 540 2191 0
2 540 2671 0
3 550 3891 0
4 550 2191 0
5 550 2671 0
6 560 9391 0
7 560 2191 0我想搜索整个表,并更改Plays列中的值,以显示该值在表中出现的次数。
理想情况下,这是我希望我的表输出的方式:
RowNumber UserID SongID Plays
1 540 2191 3
2 540 2671 2
3 550 3891 1
4 550 2191 3
5 550 2671 2
6 560 9391 1
7 560 2191 3有没有办法搜索表并更新这些值?输入到表中的数据量相当大,因此高效的解决方案将非常受欢迎。
发布于 2013-05-01 22:04:02
考虑使用视图而不是表,除非出于性能原因需要缓存该值。您可以计算子查询中每个值的计数,并将结果连接回表中,如下所示:
SELECT Table.RowNumber, Table.UserID, Table.SongID, x.Plays
FROM Table
INNER JOIN (
SELECT SongID, COUNT(*) AS Plays
FROM Table
GROUP BY SongID
) x
ON Table.SongID = x.SongID;并使用CREATE VIEW TableWithPlays AS SELECT ...从它创建一个视图。在SongID上建立索引将允许子查询相当快地完成,并且您永远不必担心Plays列是最新的。
如果您确实希望缓存值,请使用基于上述查询的UPDATE查询:
UPDATE Table a
INNER JOIN (
SELECT SongID, COUNT(*) AS Plays
FROM Table
GROUP BY SongID
) b
ON a.SongID = b.SongID
SET Plays = b.Plays;与视图解决方案一样,不要忘记SongID上的索引。
https://stackoverflow.com/questions/16319555
复制相似问题