Сортировка по алфавиту англоязычных строк.

Сортировка по алфавиту англоязычных строк.

Друзья, есть в БД такая таблица:
+----+------+--------------------+----------+
| id | abbr | full_name | abbr_eng |
+----+------+--------------------+----------+
| 0 | H | Наличный расчёт | NULL |
| 2 | Б | Квитанция в банк | NULL |
| 4 | СС | Кредитная карта | CC |
| 6 | Ban | Бонусы | NULL |
| 7 | WM | Webmoney | NULL |
| 8 | PC | PayCash | NULL |
| 10 | MM | MoneyMail | NULL |
| 9 | YND | Яндекс.Деньги | NULL |
| 11 | P | Партнер | NULL |
| 1 | Б | Безналичный расчёт | NULL |
| 12 | RP | RuPay | NULL |
+----+------+--------------------+----------+

В итоге надо получить <select>, но в таком виде, чтобы вначале шли русскоязычные строки по алфавиту (Бонусы, ...), затем англоязычные по алфавиту (MoneyMail,...)

1. Пробовала при вытягивании из БД ORDER BY full_name ASC/DESC:
MoneyMail
PayCash
RuPay
Webmoney
Банерные показы
Безналичный расчёт
Квитанция в банк
Кредитная карта
Наличный расчёт
Яндекс.Деньги

------

Яндекс.Деньги
Наличный расчёт
Кредитная карта
Квитанция в банк
Безналичный расчёт
Банерные показы
Webmoney
RuPay
PayCash
MoneyMail

Не хочет... может кто знает как можно сделать на этапе выборки ? Collation там как нибудь туда запихать ??

2. При помощи различных функций типа sort тоже не получилось... может хотя бы здесь есть варианты ??
3. Если ни одним из вышеперечисленных способов не получиться, есть ли в PHP функция для определения к какому алфавиту принадлежит строка/символ ?

вообще помогите хоть как... ))
 

Gas

может по одной?
вот например вариант:
ORDER BY full_name REGEXP '^[a-z]' ASC, full_name ASC;

но у него много ограничений.
 

Gas

может по одной?
а как он работает ты понял(а) (этого момента не понял я) ?
 

Gas

может по одной?
Строки у которых первая буква поля full_name латинская "опускаются" ниже других. Следовательно ограничения такие - если первый символ не из английского алфавита, то запись будет вверху.

просто было слово "Пробовала", такие описки крайне редки, вот и подумал.
 
вообще то так тоже понятнее не стало ))
я бы предположил, что ORDER BY full_name REGEXP '^[a-z]' ASC сортирует, только англоязычные строки (так сказать то, что передано ему на вход), но второй full_name ASC должен опять всё перемешать по своему, как будто было просто full_name ORDER BY ASC...
Можно почитать где, кроме гугла ? ))
 

dimagolov

Новичок
Вася Патриков, второй ордер сортирует то, для чего первый аргумент ордера равен. для не-английских он "", то есть выше всех английских букв, а потом сортируем внутри не-английского и каждой англиской первой буквы.
 

Angerslave

Новичок
Вася Патриков
Сортируются не по алфавитам, а по кодам в ASCII таблице символов. А там символы латинского алфавита стоят перед символами русского(например), поэтому слова, начинающиеся с английского символа идут в начале. Затем, так как у нас условие REGEXP '^[a-z]' ASC, то у нас ещё несколько строк с нулевым порядком сортировки, то есть их между собой тоже надо как-то отсортировать. Этим и занимается второе условие - full_name ASC.
 
Сверху