MySQL Group By或Order By

时间:2013-07-08 11:00:51

标签: php mysql database

我有一个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

我需要订购DESC c2,而不重复c1

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];
     }
 }

有什么想法吗?

5 个答案:

答案 0 :(得分:2)

您希望每个c2的最高c1

SELECT c1, max(c2) as max_c2
FROM myTable 
group by c1
order by max_c2 desc

答案 1 :(得分:0)

SELECT C1, MAX(C2) AS C2
FROM myTable
GROUP BY C1
ORDER BY C2 DESC

答案 2 :(得分:0)

你需要通过“不重复”第一列来决定你的意思。你确实需要一个group by。在这里,它从第二列中选择最大值:

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的任意值。您应该更具体地了解您想要的值 - 例如最大值。

答案 3 :(得分:0)

我认为这个查询有效:

SELECT C1, max(C2) as maxC2 FROM myTable WHERE date='$SL_DATE' group by C1 order by maxC2 DESC

答案 4 :(得分: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>";
    
  3. 在数据阵列中,有组作为键,只出现一次。在这些组中,给出了所有值。