За последние 24 часа нас посетили 15848 программистов и 1552 робота. Сейчас ищут 903 программиста ...

Несколько сортировок или выборок

Тема в разделе "PHP и базы данных", создана пользователем VLK, 2 сен 2015.

  1. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    Есть такая таблица:
    Код (Text):
    1. CREATE TABLE `nums_tb`
    2. (
    3.   `id` BIGINT(20) UNSIGNED NOT NULL AUTO_INCREMENT,
    4.   `nn` BIGINT(20) NOT NULL,
    5.   PRIMARY KEY (`id`)
    6. ) ENGINE=MyISAM;
    7.  
    8. INSERT INTO `nums_tb` (`nn`) VALUES
    9. (3),(5),(7),(3),(12),(7),(6),(12),(5),(7),(1),(3);
    есть запрос:
    Код (Text):
    1. SELECT * FROM `nums_tb` WHERE `nn` > 2 ORDER BY `nn` DESC LIMIT 0,3;
    http://sqlfiddle.com/#!9/b7f41/1

    в результате оно выдает:
    мне надо что бы сначала шел id 8 потом 5 потом 3.
    т.е. что бы выборка (или сортировка) происходила по двум вещам сначала я выбираю самые большие значения в nn (и по ним сортировало), а потом из этого еще происходила сортировка по id, но при этом самые большие значения из nn все равно были первыми, а там где они совпадают (например как с цифрой 12) впереди шли те у кого id больше.
    Ну а потом уже выполнялся LIMIT.

    PS реальная таблица ищет через FULLTEXT, там возвращается значение релевантности, там вот надо сортировать сначала по релевантности, потом по id, что бы сначала шли самые релевантные и в тоже время самые последние записи.
     
  2. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    не проще ли в пхп krsort сделать?

    если ты сделаешь
    Код (Text):
    1. SELECT * FROM `nums_tb` WHERE `nn` > 2 ORDER BY `nn` DESC, `id` DESC LIMIT 0,3;
    то прост будет 8, 5, 10
     
  3. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    ну так вроде в том и бида, я же делаю выборку через LIMIT и к тому что я получу применять еще какие то сортировки бессмысленно, мне надо абстрактно говоря до LIMIT пересортировать.
     
  4. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    почему бессмысленно. Ты получил порцию данных, а что ты с ними делаешь и в какой последовательности - уже твоё дело. Тут ты царь и господин.
     
  5. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    смотри ка запахало, я пробовал у меня все время ошибка была, а
    Код (Text):
    1. ORDER BY `nn` DESC, `id` DESC
    происходит ДО LIMIT? или после него?
     
  6. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    до конечно. короче всё будет работать как надо, если тебе не принципиально, чтобы сначала были твои айдишники.
     
  7. VLK

    VLK Старожил

    С нами с:
    15 дек 2013
    Сообщения:
    3.010
    Симпатии:
    58
    спасибо, вообще пашет как надо, я опять затупил с объяснением ситуации.