【发布时间】:2011-03-09 21:01:50
【问题描述】:
我有一个要按字母顺序排序的查询,但诀窍是我希望排序能够平等地对待两列。例如,如果first_col 的第一行等于apple,second_col 的第二行等于aardvark,我希望second_col 第二行的值列在之前 first_col 第一行的值。一个值(不是NULL 或'')将始终存在于second_col 的每一行中,但first_col 中的值可以是''。希望我已经解释得足够好。我不在乎是否必须为此使用 MySQL 或 PHP,但是一旦排序,数组就会被读取并回显到 HTML 表中。有什么想法吗?
编辑
这就是我现在的代码。在我的 MySQL 查询中,我需要 b_name 和 l_name 相等。 b_name 列并不总是有值。当我将值放入表中时,它基于b_name 的存在。如果b_name 不存在,则将f_name 和l_name 组合起来替换b_name。
$query = "SELECT * FROM customers ORDER BY b_name, l_name";
$result = mysql_query($query);
mysql_close($link);
$num = mysql_num_rows($result);
for ($i = 0; $i < $num; $i++){
$row = mysql_fetch_array($result);
$class = (($i % 2) == 0) ? "table_odd_row" : "table_even_row";
if($row[b_name]!=''){
echo "<tr class=".$class.">";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[c_id]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[b_name]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[phone]."</a></td>";
echo "</tr>";
}
else{
echo "<tr class=".$class.">";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[c_id]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[f_name]." ".$row[l_name]."</a></td>";
echo "<td><a href=Edit_Customer.php?c_id=".$row[c_id].">".$row[phone]."</a></td>";
echo "</tr>";
}
}
?>
</table>
【问题讨论】:
-
如果第一行是
'a','b',第二行是'b','a',并且两列被平等对待,那哪一行应该在前,为什么? -
向我们展示查询。通常,使用两列作为一列进行排序的唯一可靠方法需要使用 UNION
标签: php mysql sorting sql-order-by