Заранее извиняюсь, если размещаю вопрос не в том разделе, но более подходящего места не нашла.
Пишу дополнение к форуму и столкнулась со странностью. Задача состоит в том, чтобы соеденить между собой 2 таблицы по одному полю. Сложность в том, что набор значений разный. Силами SQL не получается, т.к. теряются строки, которые не встречаются в другой таблице. Я правильно понимаю, что такое в php невозможно? Раньше писала на oracle, там есть такая возможность.
Решила поступить по другому. Получаю 2 отдельные таблицы, упорядоченные по текстовому полю и вывожу их на экран соеденяя в ручную по порядку. (Сразу уточню, что по id упорядочиватьне получается, т.к. пользователям потом будет неудобно.) Но! Когда таблицы упорядочиваются с помощью order by - они упорядочиваются без учета регистра, а года я их сравниваю между собой, чтобы сопоставить строки между собой с помощью strcasecmp, то английские буквы сравниваются нормально, а русские нет, в русском "а" и "А" оказываются разными. Приведение к верхнему регистру с помощью strtoupper тоже эффекта не дает, русские буквы не приводятся.
Заменять все буквы на верхний регистр вручную? Другого пути нет?
Функция будет выполняться очень часто, поэтому хочется, чтобы она выполнялась максимально быстро.
Для лучшего понимания приведу пример:
Есть две таблицы:
1. А
В
Г
2. А
б
Г
С помощью order by они упорядочатся таким образом, как в примере, а когда я их буду сравнивать построчно, то "б" окажется больше "В" и из-за этого не получается нормально поставить в соответствие строчки.
Преобразование русских символов в верхний регистр
Правила форума
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
).
Местная Конституция | Шаблон запроса | Документация (phpBB3) | Переход на 3.0.6 и выше | FAQ-3 (phpbb3) | Как задавать вопросы | Как устанавливать моды
Ваш вопрос может быть удален без объяснения причин, если на него есть ответы по приведённым ссылкам (а вы рискуете получить предупреждение
-
Афина
- phpBB 1.0.0
- Сообщения: 6
- Стаж: 16 лет 5 месяцев
- Благодарил (а): 4 раза
-
MIT
- Former team member
- Сообщения: 2500
- Стаж: 17 лет 6 месяцев
- Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
- Благодарил (а): 3 раза
- Поблагодарили: 351 раз
Re: Преобразование русских символов в верхний регистр
JOINАфина писал(а):чтобы соеденить между собой 2 таблицы по одному полю
Афина писал(а):а когда я их буду сравнивать построчно, то "б" окажется больше "В"
collate utf8_general_ci (для Мускуля)А вообще инфы недостаточно, что бы помочь тебе с написанием правильного запроса.
-
Афина
- phpBB 1.0.0
- Сообщения: 6
- Стаж: 16 лет 5 месяцев
- Благодарил (а): 4 раза
Re: Преобразование русских символов в верхний регистр
MIT, но ведь с помощью JOIN потеряются строки, у которых нет соответствия в другой таблице? В примере выше строки А=А и Г=Г соеденятся, а строки с б и В потеряются, а мне нужны все строки без потерь. Если нет соответствия в другой таблице, то эти поля должны быть null.
Пока еще не поняла что это такое, но пошла искать инфу в инете. Спасибо.MIT писал(а):collate utf8_general_ci (для Мускуля)
-
MIT
- Former team member
- Сообщения: 2500
- Стаж: 17 лет 6 месяцев
- Откуда: 56°20′02″ с. ш. 36°42′45″ в. д.
- Благодарил (а): 3 раза
- Поблагодарили: 351 раз
Re: Преобразование русских символов в верхний регистр
Ничего никуда не потеряется. Прочитай статью по ссылке, там понятно расписано.Афина писал(а):но ведь с помощью JOIN потеряются строки, у которых нет соответствия в другой таблице?
-
Афина
- phpBB 1.0.0
- Сообщения: 6
- Стаж: 16 лет 5 месяцев
- Благодарил (а): 4 раза
Re: Преобразование русских символов в верхний регистр
ссылку не заметила. Спасибо еще раз.
Добавлено спустя 5 минут:
outer join все-таки можно использовать.
Поняла почему не получалось.
Пробовала сделать запрос в phpmyadmin, там outer join не воспринимается. Надо было использовать не в phpmyadmin, а в самой программе, тогда получится.
Спасибо большущее. Это то, что мне нужно.
Извиняюсь за глупые вопросы. У меня только первый проект на php.
Добавлено спустя 5 минут:
outer join все-таки можно использовать.
Поняла почему не получалось.
Пробовала сделать запрос в phpmyadmin, там outer join не воспринимается. Надо было использовать не в phpmyadmin, а в самой программе, тогда получится.
Спасибо большущее. Это то, что мне нужно.
Извиняюсь за глупые вопросы. У меня только первый проект на php.
-
Shredder
- Former team member
- Сообщения: 2266
- Стаж: 17 лет 9 месяцев
- Благодарил (а): 283 раза
- Поблагодарили: 584 раза
Re: Преобразование русских символов в верхний регистр
http://www.google.ru/search?hl=ru&sourc ... +&gs_rfai=Афина писал(а):английские буквы сравниваются нормально, а русские нет, в русском "а" и "А" оказываются разными. Приведение к верхнему регистру с помощью strtoupper тоже эффекта не дает, русские буквы не приводятся.
-
Nekstati
- Поддержка

- Сообщения: 3365
- Стаж: 17 лет 6 месяцев
- Благодарил (а): 37 раз
- Поблагодарили: 1454 раза
Re: Преобразование русских символов в верхний регистр
Для русских букв — utf8_strtoupper, utf8_strtolower, utf8_strpos, utf8_str_replace и т. д., см. файл includes/utf/utf_tools.php.
-
Афина
- phpBB 1.0.0
- Сообщения: 6
- Стаж: 16 лет 5 месяцев
- Благодарил (а): 4 раза

