![]() |
|
Модераторы: skyboy |
![]()
|
|
| Avtor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
Выдает: Раздел 10 Раздел 2 Раздел 3 Раздел 4 Можно как-нибудь поправить ситуацию средствами SQL? |
|||
|
||||
| Akina |
|
|||
|
Советчик ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 20581 Регистрация: 8.4.2004 Где: Зеленоград Репутация: 106 Всего: 454 |
Конечно. Сортировать не по текстовому полю, а привести его к чисельному.
-------------------- О(б)суждение моих действий - в соответствующей теме, пожалуйста. Или в РМ. И высшая инстанция - Администрация форума. |
|||
|
||||
| Ignat |
|
||||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
А можно так, если, конечно, формат постоянен:
-------------------- Теперь при чем :P |
||||
|
|||||
| Avtor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
КАк же его привести к чисельному?
|
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Выделить из текста число строковыми ф-циями (e.g. SUBSTRING ) и воспользоваться функцией CAST для преобразования. -------------------- Теперь при чем :P |
|||
|
||||
| Avtor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
Вы можете привести код, а то мне на таком уровне нелегко общаться с MySQL.
|
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Что-то вроде:
За подробностями к мануалу -------------------- Теперь при чем :P |
|||
|
||||
| Avtor |
|
|||
|
Шустрый ![]() Профиль Группа: Участник Сообщений: 111 Регистрация: 21.7.2006 Репутация: нет Всего: нет |
Пишу:
Говорит "ошибка рядом с (SUBSTRING('razd', LENGTH('Раздел ')) AS INT) AS 'ordering' FROM 'learn_razd' ORDER BY 'ordering'"! |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Avtor, вопрос - версия БД?
Обратите внимание на кавычки! -------------------- Теперь при чем :P |
|||
|
||||
| muzer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 31.8.2006 Репутация: 30 Всего: 31 |
Технические извращения правильные приведены
Но, по-моему, ошибка заключается в проектировании структуры базы данных, конкретно данной таблицы. Если порядок сортировки каких-либо сущностей не может быть определён обычным ORDER BY, а требует вычленения подстрок для сортировки результата, то правильным решением является заведение дополнительного числового поля в таблице, определяющего порядок сортировки. Потому что рано или поздно появятся строки вида "Подраздел 1" "Подраздел 2", а потом "Меню 1" "Меню 2" и т.д. и техническое извращение будет всё извращённее и извращённее) |
|||
|
||||
| Ignat |
|
|||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Естествено... Хранить явно избыточное слово "Раздел" совершенно не к чему, а ежель кроме раздела подразумевается подраздел, то уже нормализовать стоит. -------------------- Теперь при чем :P |
|||
|
||||
| muzer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 31.8.2006 Репутация: 30 Всего: 31 |
Это была первая моя мысль. Потом я подумал - а почему бы и нет, не прибивать же гвоздями это слово где-то ещё, даже если оно и повторяется в 5 строках. Это навигация, она может меняться, могут добавляться новые пункты с другими словами. Нормализовать - а стоит ли овчинка выделки? Заводить целую таблицу и механизм внесения изменений ради чего? Оффтопик: нормализация - это зло в двух крайних точках: 1. когда данных очень мало (потому что механизм работы с тучей таблиц сложнее) 2. когда данных очень много (потому что быстрая выборка данных становится невозможной). |
|||
|
||||
| Ignat |
|
||||
![]() Флудератор ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 4030 Регистрация: 19.4.2004 Где: غيليندزيك مدينة Репутация: 21 Всего: 73 |
Продолжаю оффтопик:
Связать по ключу не намного сложнее, но если нормализовать приходится значительное кол-во сущностей - то да, соединять десяток таблиц попахивает маразмом.
А вот тут, наверное, не соглашусь. Если правильно расставлены индексы, то снижение скорости, как правило, незначительно. -------------------- Теперь при чем :P |
||||
|
|||||
| muzer |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 387 Регистрация: 31.8.2006 Репутация: 30 Всего: 31 |
Проверено на практике, что если в таблицу со 100 млн строк добавить избыточное поле, то выборка будет быстрее, нежели джойн этой таблицы с другой (хоть у другой праймари кий и строк всего 1-2 млн). Особенно это "быстрее" заметно, если селекты повторяются регулярно И проверено не однократно, ни на одной таблице, а ежедневно на сотнях таблиц Но конечно же не претендую на абс истину, возможно, у кого-то есть другой опыт. |
|||
|
||||
![]()
|
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | MySQL | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |