За последние 24 часа нас посетили 24530 программистов и 1647 роботов. Сейчас ищут 892 программиста ...

0 в канец масива!

Тема в разделе "PHP и базы данных", создана пользователем immortal.1986, 15 окт 2014.

  1. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Добрый день! прошу подсказать/помочь!
    Суть дела в том - есть каталог товаров! и фильтр по ним! выберем сортировку по с низ по макс цене!
    сортирует все нормально,разбивает(допустим по 50 товаров!) НО есть товары с ценой 0.00!
    далее придумал скрипт, он проверяет по 0.00 вырезает удаляет и вставляет в конец массива (все отлично делает)!
    НО он сделал сортировку! по первой порции массива(50 товаров и кинул 0 в конец),переходим типо на 2 стр. следующих товаров 50(следующия порция массива!) и тд! и на последний страницы выводиться все правильно!
    НО НАДО ЧТО БЫ 0.00 БЫЛИ НЕ ВКОНЦЕ 1 порции а в последний!!!!!
    (возможно коряво пытаюсь объяснить но все работает типо отлично и самое главное(правильно со стороны программы!))
    подумав пришел к выводу что мучать голову не надо! и нужно просто подправить запрос!
    тоесть нужно выбрать все товары отсортировать по возрастанию, а товары с 0 кидать в конец выборки!
    жду коменты! если что уточню
     
  2. kazadai90

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

    С нами с:
    6 фев 2013
    Сообщения:
    103
    Симпатии:
    19
    select * from table where price <> 0
    union
    select * from table where price = 0
     
  3. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    никаких юнионов не надо. зачем два запроса делать?
    налету агрегируем поле с 1 для всех ненулевых цен и 0 для всех нулевых
    сортируем по этому полю и потом по цене
     
  4. kazadai90

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

    С нами с:
    6 фев 2013
    Сообщения:
    103
    Симпатии:
    19
    sql запрос в студию!....?
     
  5. immortal.1986

    immortal.1986 Активный пользователь

    С нами с:
    24 сен 2013
    Сообщения:
    257
    Симпатии:
    0
    Нет не подходить а как сортировать???? у меня то одна сортировка! колега подсказывает что можно типо (каойто условие фунция каторая по найденому НУЛ кидает его в конец , ну типо заменить с нул на 0, он просто ОРАКЛОИД и у него такое подобное есть!)
     
  6. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    а вы по словесному описанию не понимаете логики?

    Код (Text):
    1. SELECT `id`, `price` FROM `table` ORDER BY CASE WHEN `price` = 0.00 THEN 0 ELSE 1 END DESC, `price` ASC
    по возрастанию цен. нулевые при этом в самой жопе списка.

    Добавлено спустя 1 минуту 37 секунд:
    то ж самое только price = 0.00 меняем на price IS NULL и все еще корректно сортируется - сначала по возрастанию ненулевые, НУЛлы в жопе списка.
     
  7. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ох, жертвы IF-ов. ORDER BY price=0, price ASC
     
  8. Ganzal

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

    С нами с:
    15 мар 2007
    Сообщения:
    9.893
    Симпатии:
    965
    в контексте "нулевую цену запихнуть в конец а список по цене сортировать" ваша запись получается лишь только короче. по скорости с IF-ом сравнимо. но IF-ами же можно и более сложную логику сортировки реализовать, чего не сделаешь простым перечислением order-by-ев. стало быть "жертвы IF-ов" счастливы быть таковыми...
     
  9. MiksIr

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

    С нами с:
    29 ноя 2006
    Сообщения:
    2.339
    Симпатии:
    44
    Ну да "можно написать очень сложную логику, по-этому, даже простую будем писать километрами кода... на всякий случай".
    Зато не промолчал, чо ;)
     
  10. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    а мне понравилось
     
  11. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    ТС, не забудьте дописать "показанные цены не являются публичной офертой, по этим ценам ничего нельзя купить у нас, звоните менегеру".

    Ну то есть попробовали бы вы нарисовать 0.0 на ибее например... хоть и в конце сортировки.