За последние 24 часа нас посетили 16680 программистов и 1650 роботов. Сейчас ищут 2032 программиста ...

мой любимый MySQL

Тема в разделе "MySQL", создана пользователем Silicium, 14 май 2008.

  1. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    Вопрос к знатокам!
    есть такой запрос:

    SELECT * FROM table WHERE id IN (7,2,123,4);

    нужно сортировку организовать как в IN, тоесть чтоб записи были с id 7,2,123,4
    таблица приведена для примера
     
  2. EugeneTM

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

    С нами с:
    19 апр 2008
    Сообщения:
    85
    Симпатии:
    0
    Куда катится мир ...

    SELECT * FROM table WHERE id IN (7,2,123,4) ORDER BY id;
     
  3. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    ты понял что ты сказал? вникни в суть вопроса сначала
     
  4. shreck

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

    С нами с:
    7 авг 2007
    Сообщения:
    479
    Симпатии:
    0
    Адрес:
    Россия, Саратов
    Создай в БД поле sortorder, забей туда порядок и в запросе делай order by sortorder.
     
  5. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    Спасибо за ответ, но порядок меняется каждую секунду, записей очень много...
     
  6. Sergey89

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

    С нами с:
    4 янв 2007
    Сообщения:
    4.796
    Симпатии:
    0
    Почему бы в коде не отсортировать записи?
     
  7. EugeneTM

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

    С нами с:
    19 апр 2008
    Сообщения:
    85
    Симпатии:
    0
    Если это id, то явно не user их вводит.
    И пусть даже каждую секунду они обновляются - порядок в in не с потолка падает.
    Оттуда и бери.
     
  8. Kreker

    Kreker Старожил

    С нами с:
    8 апр 2007
    Сообщения:
    5.433
    Симпатии:
    0
    Сдается мне, что он хочет рандом.
     
  9. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    мануал - order by field
     
  10. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    все может быть :)
     
  11. BS

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

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    [sql]
    SELECT t.* FROM test t, (SELECT 1 order_by,7 id union select 2,2 union select 3,123 union select 4,4) s
    where t.id=s.id order by s.order_by
    [/sql]
     
  12. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    а можно пояснить? извините за необразованность...
     
  13. EugeneTM

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

    С нами с:
    19 апр 2008
    Сообщения:
    85
    Симпатии:
    0
    Есть сомнения по времени его выполнения

    В таком виде сколько времения по сравнению с исходным будет выполняться?
     
  14. BS

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

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    Silicium

    [sql]SELECT 1 order_by,7 id union select 2,2 union select 3,123 union select 4,4[/sql]

    дает тебе таблицу с парами порядковый номер, идентификатор

    этот селект ты должен сформировать сам (как-то же ты собирался получать ряд WHERE id IN (7,2,123,4); ), порядковый номер - это просто 1,2,3,4... и т.д. нужен для сортировки

    дальше идет простое связывание таблиц по id
     
  15. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    спасибо!
     
  16. BS

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

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    EugeneTM У меня ведь нет исходной базы, не могу проверить
     
  17. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    Точно! записей больше 100000

    решил проблему простым сшиванием массивов :)
    построил массив сортировки отсортировал по order => id
    отсортировал по id, а потом подшивал к ему данные с основной таблицы/ которые выбрал отсортированными по id,
    и в конце концов отсортировал массив по ключу, тоесть по order

    Решение конечно не MySQL, а программное, кто придумает MySQL - пишите очень хочется знать
     
  18. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    Silicium таки потрудись объяснить на русском что тебе надо.
     
  19. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    есть две большие таблицы, по минимум 100000 записей, одна хранит информацию о клиенте, друга количество авто этого клиента от 1 до 100, нужно сделать сортировку клиентов по количеству авто,

    всякие LEFT JOIN не катят, базу ложит невероятно... проверенно
     
  20. BS

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

    С нами с:
    10 апр 2008
    Сообщения:
    149
    Симпатии:
    0
    что-то тут не так

    может быть, стоит создать дополнительный индекс?
     
  21. EugeneTM

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

    С нами с:
    19 апр 2008
    Сообщения:
    85
    Симпатии:
    0
    Это не к тебе вопрос был.

    Просто в MySQL'e подзапросы недоделаны. Даже если подзапрос выдает константный результат, оптимизатор далеко не всегда так считает. И выполняет подзапрос столько раз сколько ему взбредет. Эту полу багу полу недоделку исправить обещают только в 6.0. Иными словами ......
    А тут подзапрос с вложенными юнионами.
    sleep на 1 сек там я воткнул чтоб посмотреть сколько раз вызываться будет подзапрос. Я на днях на эти грабли сам попал, слава богу помогли

    http://xpoint.ru/forums/computers/dbms/ ... 2661.xhtml
     
  22. Silicium

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

    С нами с:
    1 апр 2008
    Сообщения:
    205
    Симпатии:
    0
    Адрес:
    Киев
    не помогает слишком много записей и к концу месяца ожидается до 1000000
    я понимаю, что выбор базы не правильный, но уже поздно нужно крутиться стем что есть
     
  23. armadillo

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

    С нами с:
    6 апр 2007
    Сообщения:
    2.380
    Симпатии:
    0
    Адрес:
    Russia, Moscow
    У этой пугалки очень ограниченные рамки.
    как это относится к первому посту?
     
  24. EugeneTM

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

    С нами с:
    19 апр 2008
    Сообщения:
    85
    Симпатии:
    0
    100 000 записей это очень немного.
    Выполни EXPLAIN твой запрос бла-бла-бла с джойнами и пульни в конфу