Сортировка глав

Discussion in 'PHP' started by Solker, 8 Nov 2009.

  1. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Работодатель задал сделать таблицу со статьями, т.е. id,name.
    Из этой таблицы выводятся статьи в сортировке по алфавиту следующим запросом:
    SELECT id,name FROM articles ORDER BY name ASC

    И все было хорошо, таблички добавлялись, крокодильчики рождались.
    Но тут работодатель стал добавлять статьи с Главами и просто их именовать мол "Название статьи. Глава 1."
    Все было хорошо до занесения главы номер 10, 11.. этк.
    т.к. теперь главы выводятся примерно в таком порядке:

    Название статьи. Глава 1.
    Название статьи. Глава 10.
    Название статьи. Глава 11.
    ..
    Название статьи. Глава 2.
    Название статьи. Глава 3.
    ..

    Как быть? Статей около сотни и делать отдельное позиционное поле для каждой а потом еще и добавлять его, я даже и не знаю. И при добавлении каждой новой статьи придется еще все эти 100 статей менять это самое поле.

    По ID сортировать нет смысла, т.к. между этими главами еще были добавлены промежуточные статьи, совершенно не относящихся к главам.
     
  2. Pashkela

    Pashkela Динозавр

    Joined:
    10 Jan 2008
    Messages:
    2,750
    Likes Received:
    1,044
    Reputations:
    339
    PHP:
    <pre>
    <?php 
    $arr 
    = array("Название статьи. Глава 1.",
                
    "Название статьи. Глава 10.",
                
    "Название статьи. Глава 2.",
                
    "Название статьи. Глава 11.",
                
    "Название статьи. Глава 3.");
    natsort($arr);
    print_r ($arr);
    ?>
    </pre>
    Функция natsort(), как получить данные в массив думаю объяснять не надо

    http://www.php.ru/manual/function.natsort.html
     
  3. Gifts

    Gifts Green member

    Joined:
    25 Apr 2008
    Messages:
    2,494
    Likes Received:
    807
    Reputations:
    614
    Solker Попробуйте так:
    Code:
    SELECT id,name FROM articles ORDER BY substring_index(name, 'Глава ',1),substring_index(name, 'Глава ', -1)+0 ASC
    
    Работать должно всяко быстрее, чем ПХПшный natsort
     
    _________________________
    1 person likes this.
  4. Andres

    Andres Elder - Старейшина

    Joined:
    4 Apr 2008
    Messages:
    320
    Likes Received:
    119
    Reputations:
    0
    В PHP не силен. но друг когда-то писал скрипт, столкнулся с аналогичной проблемой, решил ее выводом к примеру от 100 до 1.
    Тоесть 100 99 98..1 вроде выводило нормально.
    Незнаю, может это и бред, но как помню..
     
  5. Solker

    Solker Elder - Старейшина

    Joined:
    4 May 2006
    Messages:
    175
    Likes Received:
    53
    Reputations:
    18
    Gifts
    Я действительно поражен, большое человеческое спасибо вам.