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

我需要订购 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];
     }
 }

有任何想法吗?

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. 在这里,它从第二列中选择最大值:

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 回答