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 に答える