Intereting Posts
разрушение сеанса в кодеригере после перенаправления Как сделать регистр сервера Linux неприемлемым? PHP / mysql получает количество затронутых строк оператора UPDATE Laravel 4 – Сортировка данных MySQL db вопросительные знаки вместо еврейских символов ..? PHPExcel – клон-лист и сохранить его оригинальный стиль Загружать файлы xls или xlsx с помощью codeigniter, mime-type error Код не работает без отключения SSL Создать комбинацию чисел Как перезагрузить запрос http.get после выполнения функции Значение Textarea не отображается на объекте $ _POST. Являются ли конструкторы абстрактного класса неявным образом вызваны при создании экземпляра производного класса? Являются ли @imagecreatefromjpeg и imagejpeg () эффективными для предотвращения загрузки пользователями изображений с вредоносным кодом php внутри них? CodeIgniter: неправильно загружать файл mime type Каков наилучший способ подключения / подключения базы данных к функции в PHP?

Сортировка MySQL-запроса с помощью ORDER BY или с помощью функций сортировки PHP

У меня есть запрос, который я хочу сортировать по алфавиту, но трюк в том, что я хочу, чтобы сортировка обрабатывала два столбца одинаково. Например, если первая строка 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>