PHP - Несколько функций uasort нарушают сортировку

SELECT       
    CASE
        WHEN LastName IS NULL THEN FirstName
        WHEN LastName IS NOT NULL THEN LastName + ', ' + FirstName
    END AS 'FullName'
FROM
    customers
GROUP BY     
    LastName,
    FirstName

Это работает, потому что формула, которую Вы используете (Оператор выбора) никогда не может давать тот же ответ для двух различных исходных данных.

Дело обстоит не так, если Вы использовали что-то как:

LEFT(FirstName, 1) + ' ' + LastName

В таком случае "James Taylor" и "John Taylor" оба привел бы к "J Taylor".

, Если Вы хотели, чтобы Ваш вывод имел "J Taylor" дважды (один для каждого человека):

GROUP BY LastName, FirstName

, Если бы, однако, Вы хотели всего одну строку "J Taylor", Вы хотели бы:

GROUP BY LastName, LEFT(FirstName, 1)
5
задан Adrian 4 March 2011 в 19:22
поделиться

1 ответ

Много лет спустя существует инструмент для очистки, больше сжатой техники, обеспеченной от PHP7 +... оператор космического корабля и сбалансированные массивы "критериев".

Код: ( Демонстрация )

uasort($array, function($a, $b) {
    return [strtotime($a['Birthday']), $a['Hometown'] !== $a['CurrentLocation'], $a['Name']]
           <=>
           [strtotime($b['Birthday']), $b['Hometown'] !== $b['CurrentLocation'], $b['Name']];
});
var_export($array);

См. демонстрационную ссылку для демонстрационного входа и вывода.

Этот отрывок отсортирует по:

  1. День рождения ASC затем
  2. родной город === CurrentLocation прежде не === затем
  3. Примечание ASC

Имени: № 2 имеет !== синтаксис только потому, что false оценку рассматривают, как 0 и true оценок рассматривают как 1.

, Если необходимо изменить какой-либо из порядков сортировки для какого-либо из критериев, просто подкачайте $a и $b в соответствующих элементах.

-1
ответ дан 14 December 2019 в 13:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: