我有一个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];
}
}
有什么想法吗?
答案 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)
不要再使用PHP mysql_ *扩展名了。在最新版本的PHP中,mysql_ *扩展名被标记为已弃用。
在我看来,你无法通过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>";
在数据阵列中,有组作为键,只出现一次。在这些组中,给出了所有值。