За последние 24 часа нас посетили 16524 программиста и 1566 роботов. Сейчас ищут 2037 программистов ...

Сортировка (MySQL)

Тема в разделе "PHP и базы данных", создана пользователем rs_ssh, 13 июн 2017.

  1. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    Как отсортировать по полю с числом от большего к меньшему, а если встречаем число 0 то как поставить это в конец сортировки? Или же лучше сразу добавлять в базу с максимальным значением, скажем 999999(вместо нуля)?
     
  2. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    отсортировать с помощью ORDER BY entry DESC
    а нули и так станут в конец
     
  3. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    буквально в лоб задачу решить можно через всякие условные функции. но это ставит крест на использовании индекса. что-то типа
    Код (Text):
    1.  
    2. … ORDER BY IF(x=0, 99999999, x)
    если таблица маленькая, то индекс вам всё равно ничего не даст, можно не париться. а на больших данных может оказаться, что выгоднее взять две выборки: для =0 и для <>0 и склеить их по UNION ALL

    пробуйте.
    http://www.mysql.ru/docs/man/Control_flow_functions.html
    https://stackoverflow.com/questions/3531251/using-union-and-order-by-clause-in-mysql
     
  4. Алекс8

    Алекс8 Активный пользователь

    С нами с:
    18 май 2017
    Сообщения:
    1.730
    Симпатии:
    359
    а зачем?? если мы сортируем от большего к меньшему то нули всегда в конце же будут?? или я что то не так понял в условии?))
     
  5. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    1) автор сформулировал криво, но суть понятна - "сортировка не по порядку". такое хочется когда 0 служит признаком "не задано", т.е. как бы вместо null

    2) формально ты прав. но да, ты не понял :)
     
    Алекс8 нравится это.
  6. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    А если нужно отсортировать от меньшего к большему, то как быть с "0" ?
    Если использовать null вместо "0" то это поможет чтобы данные с null были в конце при сортировке?
     
  7. rs_ssh

    rs_ssh Активный пользователь

    С нами с:
    18 янв 2014
    Сообщения:
    220
    Симпатии:
    0
    PHP:
    1. SELECT * from `table` WHERE rate <> 0
    2. UNION ALL
    3. SELECT * from `table` WHERE rate = 0
    При таком запросе индексы будут работать?
    Намного ли запрос будет медленнее если сравнивать с
    PHP:
    1. SELECT * from `table` ORDER BY rate ASC?
     
  8. artoodetoo

    artoodetoo Суперстар
    Команда форума Модератор

    С нами с:
    11 июн 2010
    Сообщения:
    11.115
    Симпатии:
    1.244
    Адрес:
    там-сям
    твои вопросы подсказывают, что ты не тупо готов это воспринять )))

    1. данных должно быть много, чтобы эта возня вообще имела смысл
    2. "будут ли работать" — а они вообще есть у тебя, для начала?
    3. в верхнем запросе тоже должен быть order by
    4. union all не сортирует, он просто добавляет строки в результат. сумма быстрых выборок может оказаться быстрее чем одна тормозная выборка. в этом суть трюка.

    вообще "будет/не будет" зависит от многих факторов. я только указал один из них. с условной функцией скорее всего НЕ будет. склейка выборок это обходное решение. понял?
    --- Добавлено ---
    [offtopic] каждый раз смешно, когда нуб вместо того, чтобы озаботиться решением задачи, фокусируется на ускорении. дружок, надо сначала добиться, чтобы было чего ускорять! [/offtopic]
     
    #8 artoodetoo, 17 июн 2017
    Последнее редактирование: 17 июн 2017