0

好吧,我有这个 mysql 表,其中一列中有数字,确认布尔值为 0 或 1,我有大约 1,000 行,所以这不是我可以手动执行的操作,但无论如何...我想按最高值对行进行排序并获取前 5 个人的姓名,并将这 5 个人放在另一个表格的列中,然后将它们设置为已确认并继续,直到表格中没有人未确认...例如:

Name:Rank:Confirm
Bob:5000:0
James:34:0
Josh:59:1
Alex:48:0
Romney:500:0
Rolf:24:0
Hat:51:0

因此,当您运行代码时,它将执行以下操作:

Squad:Name1:Name2:Name3:Name4:Name5
1:Bob:Romney:Hat:Alex:James 

(你可以看到 Josh 被排除在外,Rolf 太低了)

而且由于罗尔夫一个人,没有其他人,他不会被分到一个团队中,并且不会被确认......

我在 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");
?>
4

1 回答 1

1

假设确认将只有 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() CALL rank();

于 2012-11-20T08:06:10.070 回答