有一个分数链接表,其中包含item_ids列表、分配给category_ids和分数。
我想做的是对于每个类别,获取分配给它的所有项目,按最高分排序。然后,这将定义该类别中的项目排名顺序。
然后,我想根据匹配的item_id和category_id将该项 RANK 存储在同一个表中。
这适用于我拥有的 PHP MySQL 代码,但不幸的是有 10000 个类别,因此在超时之前大约需要 30 分钟。
以下是 im 所做的事情的示例:
SELECT category_id FROM tbl_categories /* - this just grabs a list of categorys to loop through */
Loop through each row returned {
SELECT item_id, score
FROM tbl_scores
WHERE category_id = CATEGORY_ID ORDER BY score DESC
MYCOUNT = 0
Loop through each results, incrementing the count and storing in another tables {
MYCOUNT = MYCOUNT + 1
UPDATE tbl_scores
SET rank = MYCOUNT
WHERE item_id = ITEMID AND category_id = CATEGORYID
}
}
尝试此查询以获取每个产品的排名(使用会话变量,在此处查看更多信息 MySql - 如何在上一行获取值和下一行获取值?
SELECT
s.categoryid ,
s.itemid,
s.score,
@rowid := IF (@prev_categroy = s.categoryid, @rowid+1, 0),
@prev_categroy := s.categoryid AS curr
FROM scores s, (SELECT @rowid:=0, @prev_categroy := NULL) AS init
ORDER BY s.categoryid, s.score DESC
我会将此结果(秩(存储在一个临时表中,然后在另一个语句中更新,通过item_id进行简单的连接,假设表的大小不是很大。