1

我有一个表格,我通过 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

有没有办法搜索表格并更新这些值?输入到表中的数据量非常大,因此非常感谢有效的解决方案。

4

2 回答 2

1

考虑使用视图而不是表,除非出于性能原因需要缓存值。您可以计算子查询中每个值的计数并将结果连接回表,如下所示:

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.

于 2013-05-01T14:04:01.887 回答
0

我认为您可以使用定期运行的简单 PHP 查询(注意:不是实际代码):

$sql = "SELECT UserID, SongID, COUNT(RowNumber) AS CNT FROM SomeTable GROUP BY 1, 2 ORDER BY 3 ASC";

foreach($result as $row){
   $sql = "UPDATE SomeTable SET Plays = ".$row['CNT']." WHERE UserID = '" . $row['UserID'] . "' AND SongID = '" . $row['SongID'] . "'";
}
于 2013-05-01T14:10:54.280 回答