MySQL查询以迭代方式为字段赋值
我使用的是一个有500000条记录的MySql表。该表包含一个字段(abbrevName),该字段在另一个字段name上存储前两个字母的两个字符表示形式 例如AA AB AC等 我想要实现的是设置另一个字段(pgNo)的值,该字段根据该名称的值存储页码的值 因此,abbrevName为'AA'的记录的页码可能为1,'AB'的页码可能为2,依此类推 问题在于,尽管多个记录可能具有相同的页码(在所有多个实体的名称可能以“AA”开头之后),但一旦具有相同页码的记录数量达到250,页码必须增加1。因此,在250个页数为1的“AA”记录之后,我们必须分配更多的页数为2的“AA”记录,依此类推 我的伪代码如下所示:MySQL查询以迭代方式为字段赋值,mysql,sql,Mysql,Sql,我使用的是一个有500000条记录的MySql表。该表包含一个字段(abbrevName),该字段在另一个字段name上存储前两个字母的两个字符表示形式 例如AA AB AC等 我想要实现的是设置另一个字段(pgNo)的值,该字段根据该名称的值存储页码的值 因此,abbrevName为'AA'的记录的页码可能为1,'AB'的页码可能为2,依此类推 问题在于,尽管多个记录可能具有相同的页码(在所有多个实体的名称可能以“AA”开头之后),但一旦具有相同页码的记录数量达到250,页码必须增加1。因此,
-Count distinct abbrevNames
-Count distinct abbrevNames with more than 250 records
-For the above abbrevNames count the the sum of each divided by 250
-Output a temporary table sorted by abbrevName
-Use the total number of distinct page numbers with 250 or less records to assign page numbers incrementally
我真的很难在一个接近这一点的查询中整合任何东西,有人能帮我处理逻辑或代码吗?请尝试一下这个:
SELECT abbrevNames, CAST(pagenumber AS signed) as pagenumber FROM (
SELECT
abbrevNames
, IF(@prev = abbrevNames, @rows_per_abbrev:=@rows_per_abbrev + 1, @pagenr:=@pagenr + 1)
, @prev:=abbrevNames
, IF(@rows_per_abbrev % 250 = 0, @pagenr:=@pagenr + 1, @pagenr) AS pagenumber
, IF(@rows_per_abbrev % 250 = 0, @rows_per_abbrev := 1, @rows_per_abbrev)
FROM
yourTable
, (SELECT @pagenr:=0, @prev:=NULL, @rows_per_abbrev:=0) variables_initialization
ORDER BY abbrevNames
) subquery_alias
更新:我有点误解了这个问题。现在它应该可以工作了我应该补充一点,pagenumber值当前都是空的(我希望),请再试一次。谢谢您的帮助。查询可以在所有记录中正常运行,但pagenumber的值在结果集中显示为(排除)。请重试。增加了演员阵容。我相信这只是你前端的问题。哎呀。。。我说得太快了。它可以指定页码,但允许每个唯一的abbrevName有无限(超过250)个页码。你能详细说明一下它的代码吗?具体来说,@pagenr变量是如何分配的?谢谢