У меня есть запрос, который я хочу сортировать по алфавиту, но трюк в том, что я хочу, чтобы сортировка обрабатывала два столбца одинаково. Например, если первая строка first_col
равна apple
а вторая строка second_col
равна second_col
я хочу, чтобы значение во второй строке 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>
Если ваши таблицы очень похожи, вы можете сделать это
В моем случае у меня есть таблица test_a
с 2 столбцами id
и name
(SELECT * FROM test_a a1) UNION ALL (SELECT * FROM test_a a2) ORDER BY name DESC
Ваш вопрос не совсем ясен, но вы можете попробовать использовать его в качестве предложения ORDER BY:
ORDER BY LEAST(first_col, second_col)
Демонстрация:
CREATE TABLE table1 (first_col VARCHAR(100) NOT NULL, second_col VARCHAR(100) NOT NULL); INSERT INTO table1 (first_col, second_col) VALUES ('a', 'b'), ('d', 'e'), ('f', 'c'); SELECT first_col, second_col FROM table1 ORDER BY first_col, second_col; ab de fc SELECT first_col, second_col FROM table1 ORDER BY LEAST(first_col, second_col); ab fc de
Пытаться
ORDER BY CONCAT(b_name, l_name)
или (если ваши поля имеют NULL, когда EMPTY)
ORDER BY COALESCE(b_name, l_name)
Как говорится выше, UNION ALL – ваш друг, и, конечно, если у вас есть только один стол, вы всегда можете это сделать:
(SELECT field1 AS name FROM TABLE1) UNION ALL (SELECT field2 AS name FROM TABLE1) ORDER BY name DESC
Итак, вы просите две разные строки в одной таблице и заказываете ее как таковой.
Спасибо всем вашим помощникам, но ни один из ваших ответов не позволил мне сортировать данные и правильно отсылать их в таблицу HTML после сортировки. UNION
возможно, сработал, но я думаю, что мое решение было быстрее, чем все это выяснилось.
$query = "SELECT c_id, b_name, l_name, f_name, phone FROM customers"; $result = mysql_query($query); mysql_close($link); $num = mysql_num_rows($result); for ($i = 0; $i < $num; $i++){ $row = mysql_fetch_array($result); if($row[b_name]!=''){ $new_result[$i]['c_id'] = $row[c_id]; $new_result[$i]['c_name'] = $row[b_name]; $new_result[$i]['phone'] = $row[phone]; } else{ $new_result[$i]['c_id'] = $row[c_id]; $new_result[$i]['c_name'] = $row[l_name].", ".$row[f_name]; $new_result[$i]['phone'] = $row[phone]; } } foreach ($new_result as $key => $row) { $c_id[$key] = $row['c_id']; $c_name[$key] = $row['c_name']; $phone[$key] = $row['phone']; } array_multisort($c_name, SORT_ASC, $c_id, SORT_ASC, $new_result); for ($i = 0; $i < $num; $i++){ $class = (($i % 2) == 0) ? "table_odd_row" : "table_even_row"; echo "<tr class=".$class.">"; echo "<td><a href=Edit_Customer.php?c_id=".$new_result[$i]['c_id'].">".$new_result[$i]['c_id']."</a></td>"; echo "<td><a href=Edit_Customer.php?c_id=".$new_result[$i]['c_id'].">".$new_result[$i]['c_name']."</a></td>"; echo "<td><a href=Edit_Customer.php?c_id=".$new_result[$i]['c_id'].">".$new_result[$i]['phone']."</a></td>"; echo "</tr>"; } ?> </table>