2013-07-08 6 views
0

У меня есть таблицаMySQL Group By или Заказывайте

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 

MySQL И мне нужно заказать 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]; 
    } 
} 

Есть идеи?

+0

Какой у вас ПЕРВЫЙ КЛЮЧ? – Strawberry

ответ

0

Я думаю, что этот запрос будет работать:

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

Perfect dijkstra :-) –

+0

И спасибо всем, кто ответил :-) –

2

Похоже, вы хотите самую высокую c2 для каждого c1:

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

Думаю, я пробовал это. Я дам ему еще один шаг –

+0

для ($ i = 1; $ i <= 10; $ i ++) { $ query = mysql_query ("SELECT c1, MAX (c2) AS TMP FROM myTable WHERE GROUP BY c1 LIMIT $ i ", $ db) –

+0

Это не работает –

0
SELECT C1, MAX(C2) AS C2 
FROM myTable 
GROUP BY C1 
ORDER BY C2 DESC 
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 от одной из строк. Вы должны уточнить, какое значение вы хотите - например, наибольшее значение.

+0

Да, извините. Мне нужно наибольшее значение из c2, но не включая более одного раза c1 –

0
  1. Дон «т использовать PHP mysql_ * расширение больше. В последней версии PHP расширение mysql_ * отмечено как устаревшее.

  2. В моих глазах вы не можете достичь своей цели только с помощью MySQL. Вы должны использовать php для управления группами. Как и в следующем примере с PHP PDO Object, вы должны использовать его в будущем.

    $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>"; 
    

В фильеры массиве данных имеются группы как ключи, которые появляются только один раз. В этих группах даны все значения.