За последние 24 часа нас посетили 16465 программистов и 1677 роботов. Сейчас ищут 790 программистов ...

MySQL ORDER BY id1,id2...idn

Тема в разделе "PHP для новичков", создана пользователем sumsum, 4 окт 2014.

  1. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    У меня результат запроса выдает всегда 5 значений, но я хочу что бы они выводились в определенном порядке например что то типа такого:
    Код (Text):
    1. SELECT `cat_id`,`cat_name`,`cat_pic` FROM `cats` ORDER BY `cat_id`={1,75,32,65,89}
     
  2. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    Код (Text):
    1. SELECT `cat_id`,`cat_name`,`cat_pic` FROM `cats` ORDER BY `cat_id`
    так и выведет

    1,15,32,65,89
     
  3. sumsum

    sumsum Новичок

    С нами с:
    13 май 2014
    Сообщения:
    96
    Симпатии:
    0
    Нет, надо именно так как я указал {1,75,32,65,89}
    то есть что бы сначала шла 1 потом 75 а потом 32 и т.д.
    Это я сначала не верно записал, а потом исправил...
     
  4. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Увы, вариант только один - использовать функции. Например, FIELD().
    Можно ещё использовать временную таблицу, но это будет "стрельба из пушки по воробьям".
     
  5. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    А вы так сделайте:

    $eternal_query_result=array(1,75,32,65,89);

    И у вас всегда будет порядок.

    UPD, кажись понял, у него идешники типа все заранее известны. Ну это просто

    Код (Text):
    1. @link->query('select * from some where id in(1,75,32,65,89);');
    Теоретически порядок не гарантирован, но практически он всегда соблюдается. То есть вы получите указанное количество записей в том порядке появления их ид в списке in()
     
  6. dapperkop

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

    С нами с:
    26 сен 2013
    Сообщения:
    890
    Симпатии:
    0
    В modx для таких целей придумано дополнительное поле `menuindex`...
     
  7. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    Очень похоже, что сам вопрос возник как "обходное решение", чтобы не исправлять косяки в логике.
    Но буквальный ответ может быть таким:
    Код (PHP):
    1. SELECT … ORDER BY FIELD(`cat_id`, 1,75,32,65,89)
    или
    Код (PHP):
    1. SELECT … ORDER BY FIND_IN_SET(`cat_id`, '1,75,32,65,89') 
     
  8. Dmitriy A. Arteshuk

    Dmitriy A. Arteshuk Активный пользователь

    С нами с:
    19 янв 2012
    Сообщения:
    2.445
    Симпатии:
    66
    Адрес:
    Зеленоград
    заибись....

    как указал тебе так и ответили

    заибись....
     
  9. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    так не делается.
     
  10. Zuldek

    Zuldek Старожил

    С нами с:
    13 май 2014
    Сообщения:
    2.381
    Симпатии:
    344
    Адрес:
    Лондон, Тисовая улица, дом 4, чулан под лестницей
    Напоминает интересную задачу, которая правда чуть о другом и посложнее. Где нужно сделать рандомную выборку при этом чтобы записи с "весовым" полем были в выборке выше остальных.
     
  11. artoodetoo

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

    С нами с:
    11 июн 2010
    Сообщения:
    11.131
    Симпатии:
    1.251
    Адрес:
    там-сям
    ну в этом случае напрашивается вложенность (или вывод во врменную таблицу — что почти одно и то же). сортировать уже малый набор.
     
  12. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    За такие "ответы"/утверждения надо навечно отлучать от программирования. ;)

    Добавлено спустя 1 минуту 16 секунд:
    Вы о чём?
     
  13. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
     
  14. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Нууу... В принципе бывает, что подобные запросы используются. Не по ИД конечно, по другим параметрам, но бывает изредка.
     
  15. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    ну вот я и говорю, что не по id. Если у него есть критерий, по которому он эти id у себя в голове выстроил, то пусть по нему и сортирует.
     
  16. mkramer

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

    С нами с:
    20 июн 2012
    Сообщения:
    8.600
    Симпатии:
    1.764
    Почему, я недавно видел такой вариант в связки со сфинксом. Его поручили прикрутить к моей системе более опытного программиста. Как я понимаю, сфинкс возвращает ID в порядке по релевантности, а потом по ним надо было получить объекты ORM в системе, и в запросе как раз я увидел ORDER BY FIELD(`id`, ...)
     
  17. deblogger

    deblogger Новичок

    С нами с:
    11 июл 2013
    Сообщения:
    200
    Симпатии:
    0
    Типа вы поняли вопрос ТС? Расскажите тогда в чем есть там суть.
     
  18. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Не важно какой вопрос, важно какой ответ. ;)
    IN не создаёт упорядоченности, никогда. IN это короткая запись ...or...or...

    И да, судя по ответу, Вы плохо понимаете работу mySQL, - стоит подтянуть. В частности, для ответа в каком порядке фактически возвращаются записи, если нет ORDER BY (в частном случае конкретного движка).