1

如何在mysql中的同一行中获得第一个最高的数字,例如我有这一行

我有这个数据库

Name Level1 Level2 Level3 Level4 Level5 Level6 Level7 Level8 Level9 Level10 Level11 Level12
armar 80 50 30 60 80 60 90 35 90 66 55 22

好的,我想在 mysql 中获得该行中的前 5 个级别并从高到低排序

示例结果将是:90 90 80 80 60

谢谢!

4

2 回答 2

1

最好使用 PHP 执行此操作,这将为您提供最佳性能,一旦您使用 PHP 获取行并将行作为数组,

$stack = array();
for($i=1;$i<=12;$i++){
    $stack[] = $row["Level".$i];
}
array_reverse(sort($stack));

现在$stack[0]$stack[1]...$stack[4]会给你最高的数字。

于 2013-04-06T09:48:17.423 回答
0

PHP 解决方案在这里会更好,但如果你只需要一个 MySQL 查询,你可以使用这个:

SELECT
  Name,
  SUBSTRING_INDEX(SUBSTRING_INDEX(Levels, ',', 1), ',', -1) Top1,
  SUBSTRING_INDEX(SUBSTRING_INDEX(Levels, ',', 2), ',', -1) Top2,
  SUBSTRING_INDEX(SUBSTRING_INDEX(Levels, ',', 3), ',', -1) Top3,
  SUBSTRING_INDEX(SUBSTRING_INDEX(Levels, ',', 4), ',', -1) Top4,
  SUBSTRING_INDEX(SUBSTRING_INDEX(Levels, ',', 5), ',', -1) Top5
FROM (
  SELECT Name, GROUP_CONCAT(Level ORDER BY Level DESC) Levels
  FROM (
    SELECT Name, Level1 Level FROM yourtable
    UNION ALL
    SELECT Name, Level2 FROM yourtable
    UNION ALL
    SELECT Name, Level3 FROM yourtable
    UNION ALL
    SELECT Name, Level4 FROM yourtable
    UNION ALL
    SELECT Name, Level5 FROM yourtable
    UNION ALL
    SELECT Name, Level6 FROM yourtable
    UNION ALL
    SELECT Name, Level7 FROM yourtable
    UNION ALL
    SELECT Name, Level8 FROM yourtable
    UNION ALL
    SELECT Name, Level9 FROM yourtable
    UNION ALL
    SELECT Name, Level10 FROM yourtable
    UNION ALL
    SELECT Name, Level11 FROM yourtable
    UNION ALL
    SELECT Name, Level12 FROM yourtable
  ) s
  GROUP BY Name
) s

在此处查看小提琴。

于 2013-04-06T09:46:36.603 回答