Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/webpack/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL查询以迭代方式为字段赋值_Mysql_Sql - Fatal编程技术网

MySQL查询以迭代方式为字段赋值

MySQL查询以迭代方式为字段赋值,mysql,sql,Mysql,Sql,我使用的是一个有500000条记录的MySql表。该表包含一个字段(abbrevName),该字段在另一个字段name上存储前两个字母的两个字符表示形式 例如AA AB AC等 我想要实现的是设置另一个字段(pgNo)的值,该字段根据该名称的值存储页码的值 因此,abbrevName为'AA'的记录的页码可能为1,'AB'的页码可能为2,依此类推 问题在于,尽管多个记录可能具有相同的页码(在所有多个实体的名称可能以“AA”开头之后),但一旦具有相同页码的记录数量达到250,页码必须增加1。因此,

我使用的是一个有500000条记录的MySql表。该表包含一个字段(abbrevName),该字段在另一个字段name上存储前两个字母的两个字符表示形式

例如AA AB AC等

我想要实现的是设置另一个字段(pgNo)的值,该字段根据该名称的值存储页码的值

因此,abbrevName为'AA'的记录的页码可能为1,'AB'的页码可能为2,依此类推

问题在于,尽管多个记录可能具有相同的页码(在所有多个实体的名称可能以“AA”开头之后),但一旦具有相同页码的记录数量达到250,页码必须增加1。因此,在250个页数为1的“AA”记录之后,我们必须分配更多的页数为2的“AA”记录,依此类推

我的伪代码如下所示:

-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变量是如何分配的?谢谢