0

私はmysqlテーブルを持っています

C1 - C2
A - 25.6
B - 22.5
C - 19.5
E - 15.6
A - 18.5
B - 20.5
F - 18.2
D - 19.6
F - 16.1
E - 20.6

そして、c1を繰り返さずにDESC c2を注文する必要があります

A - 25.6
B - 22.5
E - 20.6
D - 19.6
F - 18.2

私はこれまでに

 for ($i=1; $i<=5; $i++) {
     $query = mysql_query("SELECT * FROM myTable WHERE date='$SL_DATE' ORDER BY c2 DESC LIMIT $i",$db);
     while ($row = mysql_fetch_array($query)) {
         $c2_[$i] = $row[c2];
     }
 }

何か案は?

4

5 に答える 5

2

c2すべての最高値が必要なようですc1:

SELECT c1, max(c2) as max_c2
FROM myTable 
group by c1
order by max_c2 desc
于 2013-07-08T11:04:01.040 に答える
0
SELECT C1, MAX(C2) AS C2
FROM myTable
GROUP BY C1
ORDER BY C2 DESC
于 2013-07-08T11:04:14.590 に答える
0

最初の列を「繰り返さない」という意味を決める必要があります。あなたがしたいですgroup by。ここでは、2 番目の列から最大値を選択します。

SELECT c1, max(c2)
FROM myTable
group by col1
WHERE date='$SL_DATE
ORDER BY max(c2) DESC
LIMIT $i

次の構文MySQL で機能します。

SELECT c1, c2
FROM myTable
group by col1
WHERE date='$SL_DATE
ORDER BY c2 DESC
LIMIT $i

c2ただし、いずれかの行から任意の値を選択します。最大値など、必要な値をより具体的に指定する必要があります。

于 2013-07-08T11:05:03.710 に答える
0

このクエリはうまくいくと思います:

SELECT C1, max(C2) as maxC2 FROM myTable WHERE date='$SL_DATE' group by C1 order by maxC2 DESC
于 2013-07-08T11:05:12.397 に答える
0
  1. PHP mysql_* 拡張機能はもう使用しないでください。最新バージョンの PHP では、mysql_* 拡張機能は非推奨としてマークされています。

  2. 私の目には、MySQL だけで目標を達成することはできません。グループを管理するには、php を使用する必要があります。将来使用する必要がある PHP PDO オブジェクトで行われた次の例のように。

    $sql = "SELECT * FROM my_table ORDER BY column1";
    try {
        foreach ($db->query($sql, PDO::FETCH_ASSOC) as $row) {
            if (!isset($data[$row['column1'])) {
                $data[$row['column1'] = array();
            }
    
            $data[$row['column1'][] = $row['column2'];
        }
    } catch (PDOExcpetion $e) {
        echo $e->getMessage();
        exit;
    }
    
    echo "<pre>";
    var_dump($data);
    echo "</pre>";
    

データ配列には、キーとしてグループがあり、一度だけ表示されます。これらのグループでは、すべての値が与えられます。

于 2013-07-08T11:28:21.957 に答える