Пропустить

Преобразование русских символов в верхний регистр

Форум для авторов модов для phpBB 3.0.x. Здесь можно попросить помощи в разработке у коллег.
Свернуть Развернуть Правила форума Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды

Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение ;) ).

Преобразование русских символов в верхний регистр

Сообщение Афина » 15.08.2010 10:51

Заранее извиняюсь, если размещаю вопрос не в том разделе, но более подходящего места не нашла.
Пишу дополнение к форуму и столкнулась со странностью. Задача состоит в том, чтобы соеденить между собой 2 таблицы по одному полю. Сложность в том, что набор значений разный. Силами SQL не получается, т.к. теряются строки, которые не встречаются в другой таблице. Я правильно понимаю, что такое в php невозможно? Раньше писала на oracle, там есть такая возможность.
Решила поступить по другому. Получаю 2 отдельные таблицы, упорядоченные по текстовому полю и вывожу их на экран соеденяя в ручную по порядку. (Сразу уточню, что по id упорядочиватьне получается, т.к. пользователям потом будет неудобно.) Но! Когда таблицы упорядочиваются с помощью order by - они упорядочиваются без учета регистра, а года я их сравниваю между собой, чтобы сопоставить строки между собой с помощью strcasecmp, то английские буквы сравниваются нормально, а русские нет, в русском "а" и "А" оказываются разными. Приведение к верхнему регистру с помощью strtoupper тоже эффекта не дает, русские буквы не приводятся.
Заменять все буквы на верхний регистр вручную? Другого пути нет?
Функция будет выполняться очень часто, поэтому хочется, чтобы она выполнялась максимально быстро.
Для лучшего понимания приведу пример:
Есть две таблицы:
1. А
В
Г
2. А
б
Г
С помощью order by они упорядочатся таким образом, как в примере, а когда я их буду сравнивать построчно, то "б" окажется больше "В" и из-за этого не получается нормально поставить в соответствие строчки.

Афина
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 31.03.2010 20:34
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение MIT » 15.08.2010 11:02

Афина писал(а):чтобы соеденить между собой 2 таблицы по одному полю
JOIN
Афина писал(а):а когда я их буду сравнивать построчно, то "б" окажется больше "В"
collate utf8_general_ci (для Мускуля)

А вообще инфы недостаточно, что бы помочь тебе с написанием правильного запроса.
За это сообщение автора MIT поблагодарил:
Афина (15.08.2010 20:09)
Аватара пользователя
MIT
Поддержка
Поддержка
 
Сообщения: 2060
Зарегистрирован: 14.03.2009 18:52
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 16 раз.
Поблагодарили: 277 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение Афина » 15.08.2010 11:33

MIT, но ведь с помощью JOIN потеряются строки, у которых нет соответствия в другой таблице? В примере выше строки А=А и Г=Г соеденятся, а строки с б и В потеряются, а мне нужны все строки без потерь. Если нет соответствия в другой таблице, то эти поля должны быть null.

MIT писал(а):collate utf8_general_ci (для Мускуля)

Пока еще не поняла что это такое, но пошла искать инфу в инете. Спасибо.

Афина
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 31.03.2010 20:34
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение MIT » 15.08.2010 11:42

Афина писал(а):но ведь с помощью JOIN потеряются строки, у которых нет соответствия в другой таблице?
Ничего никуда не потеряется. Прочитай статью по ссылке, там понятно расписано.
Аватара пользователя
MIT
Поддержка
Поддержка
 
Сообщения: 2060
Зарегистрирован: 14.03.2009 18:52
Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
Благодарил (а): 16 раз.
Поблагодарили: 277 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение Афина » 15.08.2010 12:19

ссылку не заметила. Спасибо еще раз.

Добавлено спустя 5 минут:
outer join все-таки можно использовать.
Поняла почему не получалось.
Пробовала сделать запрос в phpmyadmin, там outer join не воспринимается. Надо было использовать не в phpmyadmin, а в самой программе, тогда получится.
Спасибо большущее. Это то, что мне нужно.
Извиняюсь за глупые вопросы. У меня только первый проект на php.

Афина
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 31.03.2010 20:34
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение Shredder » 15.08.2010 12:36

Афина писал(а):английские буквы сравниваются нормально, а русские нет, в русском "а" и "А" оказываются разными. Приведение к верхнему регистру с помощью strtoupper тоже эффекта не дает, русские буквы не приводятся.

http://www.google.ru/search?hl=ru&sourc ... +&gs_rfai=
За это сообщение автора Shredder поблагодарил:
Афина (15.08.2010 20:14)

Shredder
Former team member
 
Сообщения: 1034
Зарегистрирован: 14.12.2008 11:18
Благодарил (а): 62 раз.
Поблагодарили: 181 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение Nekstati » 15.08.2010 12:47

Для русских букв — utf8_strtoupper, utf8_strtolower, utf8_strpos, utf8_str_replace и т. д., см. файл includes/utf/utf_tools.php.
За это сообщение автора Nekstati поблагодарил:
Афина (15.08.2010 20:09)
Аватара пользователя
Nekstati
Лидер поддержки
Лидер поддержки
 
Сообщения: 2571
Зарегистрирован: 19.03.2009 18:43
Благодарил (а): 9 раз.
Поблагодарили: 772 раз.

Re: Преобразование русских символов в верхний регистр

Сообщение Афина » 15.08.2010 20:08

Shredder, Nekstati, спасибо большущее

Афина
phpBB 1.0.0
 
Сообщения: 4
Зарегистрирован: 31.03.2010 20:34
Благодарил (а): 3 раз.
Поблагодарили: 0 раз.


Вернуться в Для авторов (phpBB 3.0.x)

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 0

Бессрочный конкурс phpBB-ориентированных материалов
FastVPS — надёжный и доступный хостинг для phpBB
Место для вашей рекламы