testinua Опубликовано: February 4, 2016 at 00:59 Опубликовано: February 4, 2016 at 00:59 (изменено) Вітаю. SQL: SELECT * FROM table ORDER BY weight DESC; Умова: в колонці weight (VARCHAR(3)) містяться данні: 10, 119, 290, 90.Результат: 90,290,110,10.Питання: Чому виводиться 90 як найбільше значення? Логічно, що воно так працює, але яким чином змусити рахувати по загальній сумі комірки? Дякую Изменено February 4, 2016 at 01:00 пользователем testinua
Lynx100 Опубликовано: February 4, 2016 at 02:54 Опубликовано: February 4, 2016 at 02:54 (изменено) нафіга інти тримати в чарі ? - це взагалі то і відповідь на питання .... що значить "змусити рахувати по загальній сумі" ????? про які суми взагалі мова йде якщо тут проста вибірка з сортуванням ? Изменено February 4, 2016 at 03:06 пользователем Lynx100
alsdfg Опубликовано: February 4, 2016 at 04:21 Опубликовано: February 4, 2016 at 04:21 Лечится пересадкой рук проектировщику БД из жопы на место. Смените тип значения в колонке weight на инт и все будет вэри гуд. А сейчас БД сортирует поле как текст.
Prime Опубликовано: February 4, 2016 at 05:39 Опубликовано: February 4, 2016 at 05:39 А сейчас БД сортирует поле как текст. верно, по первым буквам 1,2,9
Phsm Опубликовано: February 4, 2016 at 05:56 Опубликовано: February 4, 2016 at 05:56 (изменено) Если сделать костылём, то должно помочь SELECT * FROM table ORDER BY CAST(weight AS int) DESC; Но тогда индекс поля weight (если таковой существует) работать не будет. Изменено February 4, 2016 at 05:56 пользователем Phsm
astraliens Опубликовано: February 4, 2016 at 08:14 Опубликовано: February 4, 2016 at 08:14 "лечится" как уже выше сказали - правильной типизацией ALTER TABLE `your_table` MODIFY COLUMN `weight ` INTEGER NOT NULL;
Den_LocalNet Опубликовано: February 4, 2016 at 08:47 Опубликовано: February 4, 2016 at 08:47 стоило бы не забыть предупредить ТС о том, что все неинтовые данные будут похерены в таком случае...
alsdfg Опубликовано: February 4, 2016 at 09:49 Опубликовано: February 4, 2016 at 09:49 стоило бы не забыть предупредить ТС о том, что все неинтовые данные будут похерены в таком случае... Да-да-да) Нужно ветку по программированию на форуме открывать...
astraliens Опубликовано: February 4, 2016 at 10:02 Опубликовано: February 4, 2016 at 10:02 стоило бы не забыть предупредить ТС о том, что все неинтовые данные будут похерены в таком случае... да, забыл об этом упомянуть... учитывая ситуацию ТСа добавлю, что для пробы лучше проверить все предварительно на тестовом стенде, малоли что там ещё разработчик к этому полю завязал и с какой целью после alter сразу же и ошибки посмотреть, если какие-то данные "не влезли" в INT, то нужно будет копать глубже и разбираться.. а вообще лучше обратиться к автору... строковый "вес" вполне может оказаться или костыль или печаль...
testinua Опубликовано: February 4, 2016 at 12:47 Автор Опубликовано: February 4, 2016 at 12:47 (изменено) Скільки відповідей. Знаю, що тип таблиці не отпимізований, але як вже є... Думаю зробити скриптом сортування після виборки, але це костиль, а не рішення... ЦМС самопал і це є проблема. Думав, що можна і VARCHAR змусити рахувати не по першому числу (чи іншому при збігу перших)...Den_LocalNet так і є, якщо зміни тим - то все що не INT буде в дупі, а мені ці приколи і гемор не потрібен. Якщо додати індекси: CREATE INDEX weight ON table(weight); чи не будуть вилазити якісь косяки в результаті? А потім використати сортування по індексам - чи має життя такий варіант? Изменено February 4, 2016 at 14:21 пользователем testinua
astraliens Опубликовано: February 4, 2016 at 13:14 Опубликовано: February 4, 2016 at 13:14 (изменено) лишний индекс не завалит ничего сам по себе, но сортировка силами субд в Вашем случае всегда будет работать именно так, как она сейчас работает и индексы этого не изменят вариант с order by CAST(weight as SIGNED) asc, как выше рекомендовали уже, частично решит проблему, но если там кроме целочисленных что-то ещё есть - оно при сортировке будет рассматриваться как null (если не ошибаюсь) и результаты будут не совсем такие, как ожидаются.. и да, при cast индекс не будет использоваться Изменено February 4, 2016 at 13:15 пользователем astraliens
testinua Опубликовано: February 4, 2016 at 14:26 Автор Опубликовано: February 4, 2016 at 14:26 дійсно, індекси всеодно дадут те й результат. В комірках присутні виключно числові значення, але вони всі з плавоючою комою. Якщо перевести тип в DEC - чи не вирішить це цю проблему? а потім на виході при потребі різати числа після коми, наприклад зробити DEC(3,5)? Так данні не пошкодяться теоретично, і теоретично сортування sql буде таким як треба?
astraliens Опубликовано: February 4, 2016 at 15:43 Опубликовано: February 4, 2016 at 15:43 оцените какова максимальная точность нужна для ваших целей и переведите в decimal, который будет приемлем рекомендую сделать дамп предварительно и в отдельную базу залить его, потренироваться там, а потом уже только в проде что-либо менять в этом варианте и сортировка будет корректно работать и индексы
testinua Опубликовано: February 4, 2016 at 21:16 Автор Опубликовано: February 4, 2016 at 21:16 (изменено) ... Да, так і буду робити - це найбільш раціональне рішення. Дякую всім на поради :-) Відповідь легше знайти в мозговому штурмі. А ще питання до Lynx100 - навіщо було -1 ставити? Ненавиджу таких людей, дарма немає такої функції, як бан персони на тему. Изменено February 4, 2016 at 21:23 пользователем testinua
Lynx100 Опубликовано: February 5, 2016 at 01:07 Опубликовано: February 5, 2016 at 01:07 (изменено) ...Да, так і буду робити - це найбільш раціональне рішення. Дякую всім на поради :-) Відповідь легше знайти в мозговому штурмі. А ще питання до Lynx100 - навіщо було -1 ставити? Ненавиджу таких людей, дарма немає такої функції, як бан персони на тему. можливо для того щоб дурних питань, ідей і ненависті до незнайомих людей менше було ? Сумно коли людина не спромоглася освоїти елементарні базові поняття SQL і СУБД, хоча б для того щоб задати нормальне питання або не задавати дурні питання, ненавидить людей за щось що вона сама не може второпати .... взагалі-то не зациклюйтеся .... отримувати мінуси не смертельно! з часом у вас їх буде менше .... все залежить в першу чергу від вас.... ... Чи не так , наш ідейний мізантроп ? .. намінусував достатньо розумник? Изменено February 5, 2016 at 02:47 пользователем Lynx100
alsdfg Опубликовано: February 5, 2016 at 07:04 Опубликовано: February 5, 2016 at 07:04 ... Да, так і буду робити - це найбільш раціональне рішення. Дякую всім на поради :-) Відповідь легше знайти в мозговому штурмі. А ще питання до Lynx100 - навіщо було -1 ставити? Ненавиджу таких людей, дарма немає такої функції, як бан персони на тему. Считайте это тестом на "шко-ло-ло головного мозга". Если пукан подгорает за "-1" на форуме значит вы еще психологически не готовы к общению в интернете :)
Lynx100 Опубликовано: February 5, 2016 at 21:39 Опубликовано: February 5, 2016 at 21:39 (изменено) Считайте это тестом на "шко-ло-ло головного мозга". Если пукан подгорает за "-1" на форуме значит вы еще психологически не готовы к общению в интернете :) дарма ви розкидуєте бісер перед свинею ..... ось що воно в приват вміє виписати )))) ось воно справжнє лице невизнаного і невпізнаного генія!!!!!! , а ви кажете )))) Розум у вас не доріс, до розвинутої і немізерної людини )))) Одним словом це треба бачити самому .... трамтарарам. .... алеееее оп .... воно раз видало це : Спілкуватись з гівном я не бажаю. Твій розум ще не доріс до того, щоб оцінювати життя в такому руслі, в якому воно йде. По суті ти людина мізерна, нерозвинута. Ти робиш те, що робили тобі - це задаток твого куриного мозку. Створи ще 10 акаунтів і натикай мені мінусів. До того ж, "шко-ло-ло" пишуть тільки діти або дорослі з дитячим розвитком. А це ти. Твої познання в SQL такі великі, що навіть про DEC не зміг підсказати? пугало й очконавт - от твій психологічний портрет. потім ссиканувшиодумалося і виправило на Твій розум ще не доріс до того, щоб оцінювати життя в такому руслі, в якому воно йде. Твої познання в SQL такі великі, що навіть про DEC не зміг підсказати? самовпевненf, морально скривджена людина - от твій психологічний портрет. Вдумайтеся в глибину слів "Твій розум ще не доріс до того, щоб оцінювати життя в такому руслі, в якому воно йде" - в цитатник однозначно testinua давай дальше віджигай ) ... бомбани ще щось ) ну щоб поржати... а ну і далі продовжуй ритися в моєму рейтингу і істерично мінусувати ))) .... Я з твого дозволу і надалі буду твої послання до народу викладати... ну щоб генія могли признати ))) Изменено February 5, 2016 at 22:50 пользователем Lynx100
testinua Опубликовано: February 6, 2016 at 00:34 Автор Опубликовано: February 6, 2016 at 00:34 (изменено) Пишіть, це все що вам дано, але коли розум не сформувався при народженні - цього не виправити. Изменено February 6, 2016 at 00:35 пользователем testinua
Lynx100 Опубликовано: February 6, 2016 at 00:35 Опубликовано: February 6, 2016 at 00:35 (изменено) Пишіть хоч 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> а чо так слабо? запал генія всох ? давай ще )) повесели людей Изменено February 6, 2016 at 00:52 пользователем Lynx100
DarkLan Опубликовано: February 6, 2016 at 01:28 Опубликовано: February 6, 2016 at 01:28 "программист" делавший базу явный "программист". Или 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>а чо так слабо?запал генія всох ? давай ще )) повесели людей что ты к человеку пристал? Ветка программирования явно на форуме не помешает.
Lynx100 Опубликовано: February 6, 2016 at 01:50 Опубликовано: February 6, 2016 at 01:50 (изменено) Или 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 | +----+-------------+-------+-------+---------------+------+---------+------+------+-----------------------------+ по хорошему конечно надо изменить тип поля.... сделать индекс по полю новому ... что и было сказано раньше что ты к человеку пристал?это я пристал ? чела очень интересовало почему минус, потом начал срать мне а ПМ какой-то больной шизой... по ходу истерично лазит в рейтингах и минусит в тех темах которые даже не читал ... и я пристал ... прикольно Изменено February 6, 2016 at 02:19 пользователем Lynx100
John_Doe Опубликовано: February 6, 2016 at 05:23 Опубликовано: February 6, 2016 at 05:23 Пишіть, це все що вам дано, але коли розум не сформувався при народженні - цього не виправити. Это точно! Если розум не сформировался для того что бы почитать хотябы про мускуль, если им пользуешся - это тяжело исправить
alsdfg Опубликовано: February 6, 2016 at 11:02 Опубликовано: February 6, 2016 at 11:02 Ха-ха, и мне написал всякие обидности в личку))) Так мило с его стороны ;-)
Рекомендованные сообщения
Создайте аккаунт или войдите в него для комментирования
Вы должны быть пользователем, чтобы оставить комментарий
Создать аккаунт
Зарегистрируйтесь для получения аккаунта. Это просто!
Зарегистрировать аккаунтВойти
Уже зарегистрированы? Войдите здесь.
Войти сейчас