首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >计算值出现的次数并将count发送到另一列?

计算值出现的次数并将count发送到另一列?
EN

Stack Overflow用户
提问于 2013-05-01 22:01:47
回答 2查看 621关注 0票数 1

我有一个通过PHP脚本输入数据的表,并使用phpMyAdmin对其进行管理。我的表有4列。第一个是自动递增,第二个和第三个是输入的值,最后一个是跟踪第三列中的值出现的次数。

这就是我的表当前的显示方式

代码语言:javascript
运行
复制
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列中的值,以显示该值在表中出现的次数。

理想情况下,这是我希望我的表输出的方式:

代码语言:javascript
运行
复制
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

有没有办法搜索表并更新这些值?输入到表中的数据量相当大,因此高效的解决方案将非常受欢迎。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-05-01 22:04:02

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

代码语言:javascript
运行
复制
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查询:

代码语言:javascript
运行
复制
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上的索引。

票数 1
EN

Stack Overflow用户

发布于 2013-05-01 22:10:54

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

代码语言:javascript
运行
复制
$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'] . "'";
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/16319555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档