Перейти к содержимому

Рекомендованные сообщения

Опубликовано: (изменено)

Вітаю.

SQL: SELECT * FROM table ORDER BY weight DESC;

Умова: в колонці weight (VARCHAR(3)) містяться данні: 10, 119, 290, 90.
Результат: 90,290,110,10.

Питання: Чому виводиться 90 як найбільше значення? Логічно, що воно так працює, але яким чином змусити рахувати по загальній сумі комірки? Дякую

Изменено пользователем testinua
Опубликовано: (изменено)

нафіга інти тримати в чарі ? - це взагалі то і відповідь на питання ....

що значить "змусити рахувати по загальній сумі" ????? про які суми взагалі мова йде якщо тут проста вибірка з сортуванням ?

Изменено пользователем Lynx100
Опубликовано:

Лечится пересадкой рук проектировщику БД из жопы на место.

Смените тип значения в колонке weight на инт и все будет вэри гуд.

А сейчас БД сортирует поле как текст.

Опубликовано: (изменено)
Если сделать костылём, то должно помочь

SELECT * FROM table ORDER BY CAST(weight AS int) DESC;

 

Но тогда индекс поля weight (если таковой существует) работать не будет.

Изменено пользователем Phsm
Опубликовано:

стоило бы не забыть предупредить ТС о том, что все неинтовые данные будут похерены в таком случае...

Да-да-да)

Нужно ветку по программированию на форуме открывать...

Опубликовано:

стоило бы не забыть предупредить ТС о том, что все неинтовые данные будут похерены в таком случае...

да, забыл об этом упомянуть...

учитывая ситуацию ТСа добавлю, что для пробы лучше проверить все предварительно на тестовом стенде, малоли что там ещё разработчик к этому полю завязал и с какой целью

после alter сразу же и ошибки посмотреть, если какие-то данные "не влезли" в INT, то нужно будет копать глубже и разбираться.. а вообще лучше обратиться к автору... строковый "вес" вполне может оказаться или костыль или печаль...

Опубликовано: (изменено)

Скільки відповідей. Знаю, що тип таблиці не отпимізований, але як вже є... Думаю зробити скриптом сортування після виборки, але це костиль, а не рішення... ЦМС самопал і це є проблема. Думав, що можна і VARCHAR змусити рахувати не по першому числу (чи іншому при збігу перших)...

Den_LocalNet

так і є, якщо зміни тим - то все що не INT буде в дупі, а мені ці приколи і гемор не потрібен.

 

Якщо додати індекси: CREATE INDEX weight ON table(weight);

 

чи не будуть вилазити якісь косяки в результаті? А потім використати сортування по індексам - чи має життя такий варіант? 

Изменено пользователем testinua
Опубликовано: (изменено)

лишний индекс не завалит ничего сам по себе, но сортировка силами субд в Вашем случае всегда будет работать именно так, как она сейчас работает и индексы этого не изменят

вариант с order by CAST(weight as SIGNED) asc, как выше рекомендовали уже, частично решит проблему, но если там кроме целочисленных что-то ещё есть - оно при сортировке будет рассматриваться как null (если не ошибаюсь) и результаты будут не совсем такие, как ожидаются.. и да, при cast индекс не будет использоваться

Изменено пользователем astraliens
Опубликовано:

 

дійсно, індекси всеодно дадут те й результат. В комірках присутні виключно числові значення, але вони всі з плавоючою комою. Якщо перевести тип в DEC - чи не вирішить це цю проблему? а потім на виході при потребі різати числа після коми, наприклад зробити DEC(3,5)? Так данні не пошкодяться теоретично, і теоретично сортування sql буде таким як треба?
Опубликовано:

 

оцените какова максимальная точность нужна для ваших целей и переведите в decimal, который будет приемлем

рекомендую сделать дамп предварительно и в отдельную базу залить его, потренироваться там, а потом уже только в проде что-либо менять

в этом варианте и сортировка будет корректно работать и индексы

Опубликовано: (изменено)

...

Да, так і буду робити - це найбільш раціональне рішення. Дякую всім на поради :-) Відповідь легше знайти в мозговому штурмі.

 

А ще питання до Lynx100 - навіщо було -1 ставити? Ненавиджу таких людей, дарма немає такої функції, як бан персони на тему.

Изменено пользователем testinua
Опубликовано: (изменено)

 

...

Да, так і буду робити - це найбільш раціональне рішення. Дякую всім на поради :-) Відповідь легше знайти в мозговому штурмі.

 

А ще питання до Lynx100 - навіщо було -1 ставити? Ненавиджу таких людей, дарма немає такої функції, як бан персони на тему.

 

можливо для того щоб дурних питань, ідей і ненависті до незнайомих людей менше було ?   :D Сумно коли людина не спромоглася освоїти елементарні базові поняття SQL і СУБД, хоча б для того щоб задати нормальне питання або не задавати дурні питання, ненавидить людей за щось що вона сама  не може второпати ....

 

взагалі-то  не зациклюйтеся .... отримувати мінуси не смертельно! з часом у вас їх буде  менше  .... все залежить в першу чергу від вас....  ;) ... Чи не так , наш ідейний  мізантроп ? .. намінусував достатньо розумник?

Изменено пользователем Lynx100
Опубликовано:

 

...

Да, так і буду робити - це найбільш раціональне рішення. Дякую всім на поради :-) Відповідь легше знайти в мозговому штурмі.

 

А ще питання до Lynx100 - навіщо було -1 ставити? Ненавиджу таких людей, дарма немає такої функції, як бан персони на тему.

 

Считайте это тестом на "шко-ло-ло головного мозга".

Если пукан подгорает за "-1" на форуме значит вы еще психологически не готовы к общению в интернете :) :) :)

Опубликовано: (изменено)

Считайте это тестом на "шко-ло-ло головного мозга".

Если пукан подгорает за "-1" на форуме значит вы еще психологически не готовы к общению в интернете :) :) :)

 

дарма ви  розкидуєте бісер перед свинею .....  ось що воно в приват вміє виписати :))))) ось воно справжнє лице невизнаного і невпізнаного  генія!!!!!! , а ви кажете  :))))) Розум у вас не доріс, до розвинутої і немізерної людини :))))) Одним словом це треба бачити самому .... трамтарарам. .... алеееее оп ....

 

 

воно раз видало це :

 

Спілкуватись з гівном я не бажаю. Твій розум ще не доріс до того, щоб оцінювати життя в такому руслі, в якому воно йде. По суті ти людина мізерна, нерозвинута. Ти робиш те, що робили тобі - це задаток твого куриного мозку. Створи ще 10 акаунтів і натикай мені мінусів.

До того ж, "шко-ло-ло" пишуть тільки діти або дорослі з дитячим розвитком. А це ти. Твої познання в SQL такі великі, що навіть про DEC не зміг підсказати? пугало й очконавт - от твій психологічний портрет.

 

потім ссиканувшиодумалося і виправило на

 

 

Твій розум ще не доріс до того, щоб оцінювати життя в такому руслі, в якому воно йде. 

 

Твої познання в SQL такі великі, що навіть про DEC не зміг підсказати? самовпевненf, морально скривджена людина  - от твій психологічний портрет.

 

 

Вдумайтеся в глибину слів "Твій розум ще не доріс до того, щоб оцінювати життя в такому руслі, в якому воно йде" - в цитатник однозначно :facepalm:

 

testinua давай дальше віджигай :)) ... бомбани ще щось :)) ну щоб поржати... а ну і далі продовжуй ритися в моєму рейтингу і істерично мінусувати :)))) ....

 

Я з твого дозволу і надалі буду  твої послання до народу викладати... ну щоб генія могли признати :))))

 

giphy.gif

Изменено пользователем Lynx100
Опубликовано: (изменено)

Пишіть, це все що вам дано, але коли розум не сформувався при народженні - цього не виправити.

2016_02_06_023239.jpg

Изменено пользователем testinua
Опубликовано: (изменено)

Пишіть хоч 100 повідомлень, але коли розум не сформувався при народженні - цього не виправити.

<a href='<a data-ipb="nomediaparse" data-cke-saved-href="http://postimg.org/image/iwa65651d/"href="http://postimg.org/image/iwa65651d/" src='http://s24.postimg.org/iwa65651d/2016_02_06_023239.jpg' border='0' alt="2016 02 06 023239" /></a>

а чо так слабо?

запал генія всох ? давай ще :))) повесели людей

Изменено пользователем Lynx100
Опубликовано:

"программист" делавший базу явный "программист". 

Или dec() или int() других вариантов не дано.

 

 

 

Пишіть хоч 100 повідомлень, але коли розум не сформувався при народженні - цього не виправити.
<a href='<a data-ipb="nomediaparse" data-cke-saved-href="http://postimg.org/image/iwa65651d/"href="http://postimg.org/image/iwa65651d/" src='http://s24.postimg.org/iwa65651d/2016_02_06_023239.jpg' border='0' alt="2016 02 06 023239" /></a>

а чо так слабо?
запал генія всох ? давай ще :))) повесели людей

 

что ты к человеку пристал? 

 

Ветка программирования явно на форуме не помешает.

Опубликовано: (изменено)

Или dec() или int() других вариантов не дано.

Я конечно не знаю как у вас с инт получается но вот такая конструкция будет работать (т.е. без конвертации в таблице типа поля)

select cast(t0 as dec(5,3)) as e from t order by e

но с индексами будет печаль т.к. будет использоваться filesort

 

mysql> explain select cast(t0 as dec(5,2)) as e from t order by e;

+----+-------------+-------+-------+---------------+------+---------+------+------+-----------------------------+

| id | select_type | table | type | possible_keys | key | key_len | ref | rows | Extra |

+----+-------------+-------+-------+---------------+------+---------+------+------+-----------------------------+

| 1 | SIMPLE | t | index | NULL | ti | 13 | NULL | 8 | Using index; Using filesort |

+----+-------------+-------+-------+---------------+------+---------+------+------+-----------------------------+

 

по хорошему конечно надо изменить тип поля.... сделать индекс по полю новому ... что и было сказано раньше

 

что ты к человеку пристал?

это я пристал ?

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

Изменено пользователем Lynx100
Опубликовано:

Пишіть, це все що вам дано, але коли розум не сформувався при народженні - цього не виправити.

2016_02_06_023239.jpg

Это точно! Если розум не сформировался для того что бы почитать хотябы про мускуль, если им пользуешся - это тяжело исправить

Создайте аккаунт или войдите в него для комментирования

Вы должны быть пользователем, чтобы оставить комментарий

Создать аккаунт

Зарегистрируйтесь для получения аккаунта. Это просто!

Зарегистрировать аккаунт

Войти

Уже зарегистрированы? Войдите здесь.

Войти сейчас
  • Сейчас на странице   0 пользователей

    • Нет пользователей, просматривающих эту страницу.
×
×
  • Создать...