我有一个通过PHP脚本将数据输入的表,并使用phpMyAdmin对其进行管理。我的表有4列。第一个是自动递增,第二个和第三个是输入的值,最后一个是跟踪第3列中的值出现了多少次。
这是我的表当前的显示方式
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
是否有方法搜索表并更新这些值?
输入到表中的数据量很大,因此非常希望找到一个有效的解决方案。
最佳答案
考虑使用视图而不是表,除非出于性能原因需要缓存该值。可以计算子查询中每个值的计数,并将结果连接回表,如下所示:
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
上的索引。