Jump to content
Local
Sign in to follow this  
testinua

ORDER BY чим лікується

Recommended Posts

Вітаю.

SQL: SELECT * FROM table ORDER BY weight DESC;

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

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

Edited by testinua

Share this post


Link to post
Share on other sites

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

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

Edited by Lynx100

Share this post


Link to post
Share on other sites

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

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

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

Share this post


Link to post
Share on other sites
А сейчас БД сортирует поле как текст.

 

верно, по первым буквам

1,2,9

Share this post


Link to post
Share on other sites
Если сделать костылём, то должно помочь

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

 

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

Edited by Phsm

Share this post


Link to post
Share on other sites

"лечится" как уже выше сказали - правильной типизацией

ALTER TABLE `your_table` MODIFY COLUMN `weight ` INTEGER NOT NULL;

Share this post


Link to post
Share on other sites

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

Share this post


Link to post
Share on other sites

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

Да-да-да)

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

Share this post


Link to post
Share on other sites

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

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

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

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

Share this post


Link to post
Share on other sites

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

Den_LocalNet

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

 

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

 

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

Edited by testinua

Share this post


Link to post
Share on other sites

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

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

Edited by astraliens

Share this post


Link to post
Share on other sites

 

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

Share this post


Link to post
Share on other sites

 

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

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

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

Share this post


Link to post
Share on other sites

...

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

 

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

Edited by testinua

Share this post


Link to post
Share on other sites

 

...

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

 

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

 

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

 

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

Edited by Lynx100

Share this post


Link to post
Share on other sites

 

...

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

 

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

 

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

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

Share this post


Link to post
Share on other sites

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

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

 

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

 

 

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

 

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

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

 

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

 

 

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

 

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

 

 

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

 

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

 

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

 

giphy.gif

Edited by Lynx100

Share this post


Link to post
Share on other sites

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

2016_02_06_023239.jpg

Edited by testinua

Share this post


Link to post
Share on other sites

Пишіть хоч 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>

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

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

Edited by Lynx100

Share this post


Link to post
Share on other sites

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

Или 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>

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

 

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

 

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

Share this post


Link to post
Share on other sites

Или 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 |

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

 

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

 

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

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

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

Edited by Lynx100

Share this post


Link to post
Share on other sites

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

2016_02_06_023239.jpg

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

Share this post


Link to post
Share on other sites

Ха-ха, и мне написал всякие обидности в личку)))

Так мило с его стороны ;-)

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
Sign in to follow this  

  • Recently Browsing   0 members

    No registered users viewing this page.

  • Similar Content

    • By Oleg2018
      При переносе биллинга на новый сервер сделал восстановоление базы строго по инструкции. Все данные получил. Пользователи работают. Но есть проблема, при создание копии базы через вебинтерфейс создается файл с размер 100 килобайт. База при переносе занимала 18 мегабайт. При проверке целосности базы нашел проблему из представлением op_customers выдает ошибку  #1449 - The user specified as a definer ('root'@'%') does not exist. Кто решал и как эту проблему
    • By superb
      Ребята, нужна помощь админа. После пропадания електричество перестал стартовать mysql на билинге абилс. Система freebsd 7.2. Пишите в личку сразу номер телефона, будет быстрее. Хорошо отблагодарю, спасибо.
    • By freehost
      Описание вакансии
      На постоянную работу в хостинг-компанию требуется сотрудник на первую линию службы технической поддержки. Офис расположен в Киеве.
       
      Обязанности:
      Отвечать на вопросы клиентов (работа с панелью управления, настройка POP3, SMTP, FTP) по телефону, эл. почте, решать мелкие проблемы (неверно заполненные данные и настройки в контрольной панели, проблемы с доступом и т. п.), сортировка заявок абонентов.
       
      Требования:
      - Умение работать в Интернет с основными клиентами (браузеры: IE и Mozilla, почтовые клиенты: The bat, outlook, FTP-клиенты: IE, Far, Cute FTP;
      - Иметь представление о том что такое HTML, PHP, MySQL
      - Скорость печати на клавиатуре не ниже 100 знаков в в минуту
      - Грамотное владение русским и украинским языком
      - Коммуникабельность, терпение, эмоциональная уравновешенность, способность к обучению.
      - Желание учиться
       
      Условия:
      Официальное трудоустройство
      24 дня отпуска
      Обеды за счет компании
      Рабочий график с 9 до 18 с понедельника по пятницу
      Оплачиваемый больничный
      Возможность повышения
       
      ЗП от 8 000. Пишите в личку.
    • By mac
      Естественно, ip сети и города - разные, версии Ubilling - одинаковые.
      Собственно, как это сделать максимально просто и безопасно?
       
      То, до чего сам додумался - это использовать "Модуль Миграция 2"
      Для это планирую сделать экспорт нужных полей из базы данных с помощью запроса


      По sql запросу вопрос прежде всего к уважаемому nightfly : оттуда ли (таблицы, поля) я беру значения?
    • By strushke
      Всем пламенный привет! Соскучились? 
      Вот вам новый вселенский вопрос каким образом из модуля делать INSERT запрос?
       
      При помощи simple_queryall плюётся вот таким сообщением:
      Warning: mysql_fetch_assoc() expects parameter 1 to be resource, boolean given in /usr/local/www/apache24/data/billing/api/libs/api.mysql.php on line 235
       
      При этом, данные добавляет.
       
      Кусок:
      $addExpenseQuery = "INSERT INTO expenses (date,summ,comment) VALUES (CURRENT_DATE(),'$addExpAmount','$addExpComment')"; $query_result = simple_queryall($addExpenseQuery);  
×