使用php和Mysql按最大数量订购并确认
我有一个mysql表,在一列中有数字,确认布尔值为0或1,我有大约1000行,所以我不能手动执行,但无论如何。。。 我想按最大值对行进行排序,获取前5个人的姓名,将这5个人放在列的另一个表中,然后将他们设置为“已确认”并继续,直到表中没有未确认的人。。。 例: 因此,当您运行代码时,它将执行以下操作:使用php和Mysql按最大数量订购并确认,php,mysql,post,rows,Php,Mysql,Post,Rows,我有一个mysql表,在一列中有数字,确认布尔值为0或1,我有大约1000行,所以我不能手动执行,但无论如何。。。 我想按最大值对行进行排序,获取前5个人的姓名,将这5个人放在列的另一个表中,然后将他们设置为“已确认”并继续,直到表中没有未确认的人。。。 例: 因此,当您运行代码时,它将执行以下操作: Squad:Name1:Name2:Name3:Name4:Name5 1:Bob:Romney:Hat:Alex:James (正如你所看到的,乔希被排除在外,而罗尔夫太低了) 由于罗尔夫是
Squad:Name1:Name2:Name3:Name4:Name5
1:Bob:Romney:Hat:Alex:James
(正如你所看到的,乔希被排除在外,而罗尔夫太低了)
由于罗尔夫是一个人,没有其他人留下来,他将不会被放入一个团队,将留下未经证实
我不是mysql的专家,所以我在这个问题上被难倒了,最多只能按级别组织整个事情,仅此而已
编辑:
我在这方面的可怕尝试:
<?php
$parse = mysql_query("SELECT MAX(rank) AS rank FROM users AND confirm='0'");
mysql_query("Insert into squad (nameone)values($parse)");
mysql_query("Update squad set confirm = '1' where name = $parse");
?>
假设确认只有1或0
CREATE TABLE table2 (id INT PRIMARY KEY AUTO_INCREMENT, name varchar(255));
CREATE PROCEDURE rank()
BEGIN
DECLARE count INT DEFAULT 1;
WHILE count > 0 DO
UPDATE table1 SET Confirm=2 WHERE Confirm=0 ORDER BY Rank DESC LIMIT 5;
INSERT INTO table2 (SELECT GROUP_CONCAT(Name) FROM table1 WHERE Confirm=2);
UPDATE table1 SET Confirm=1 WHERE Confirm=2;
SELECT count(*) FROM table1 WHERE Confirm=0;
END WHILE;
END;
随时可以调用过程rank()
callrank()代码>是的,我试着按等级组织,然后使用explode+foreach将变量拆分,然后每5个插入一个(在剩下剩余的部分后被难住了),但后来我发现,我尝试将值排序到团队中的方式太乱了,感觉可以用mysql或大部分mysql来完成。>不管怎样,发布你的尝试,这样我们就有了一个出发点,这是我得到的最好的结果,事实上它没有达到我想要的效果,当我意识到我不能告诉它添加到第一个squadneat上时,我被难住了,但我猜第一行是没有必要的?我可以在mysql查询的“Begin”和“End”标记之间使用吗?(这是出于好奇)如果您已经有一个表,那么第一行CREATE TABLE
是不必要的。您必须遍历该表,因此需要存储过程
CREATE TABLE table2 (id INT PRIMARY KEY AUTO_INCREMENT, name varchar(255));
CREATE PROCEDURE rank()
BEGIN
DECLARE count INT DEFAULT 1;
WHILE count > 0 DO
UPDATE table1 SET Confirm=2 WHERE Confirm=0 ORDER BY Rank DESC LIMIT 5;
INSERT INTO table2 (SELECT GROUP_CONCAT(Name) FROM table1 WHERE Confirm=2);
UPDATE table1 SET Confirm=1 WHERE Confirm=2;
SELECT count(*) FROM table1 WHERE Confirm=0;
END WHILE;
END;