За последние 24 часа нас посетили 55429 программистов и 1709 роботов. Сейчас ищет 2321 программист ...

несколько таблиц в массив, а затем сортировка по дате

Тема в разделе "PHP для новичков", создана пользователем el, 3 дек 2008.

  1. el

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

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Доброго времени суток.
    Решил сделать RSS на сайте, но что бы там были не только новости, но и новые статьи и ворклоги (http://modding.uz). Имею таблицы:

    ----- Новости - news -----
    id - айди
    zag - заголовок
    txt - текст новости
    activ - если 1, то новость активна
    kogda - дата последнего изменения

    ----- Статьи - stat -----
    id - айди
    zag - заголовок
    txt - текст статьи
    activ - если 1, то статья активна
    kogda - дата последнего изменения

    ------ Ворклоги - worklogs -----
    id - айди
    namework - заголовок
    txt - текст ворклога
    activ - если 1, то ворклог активен
    kogda - дата последнего изменения

    Задумка: получатели RSS видят когда добавилась/изменилась статья/новость/ворклог.
    Пути решения: загнать в массив из каждой таблицы заголовок, ссылку, первые_несколько_строк_текста и дату, соединить массивы и отсортировать по дате от новым к старым, затем в цикле вывести на страничку rss.php.

    Проблемы: Как отсортировать массив из массивов по полю "дата"? нашёл функцию array_multisort. Как это сделать и тем более, как сделать в цикле - не понял.

    Мелкая проблема: в переменной первые_несколько_строк_текста предполагается хранить первые (к примеру) 200 символов из поля txt, но не так, что б обрывалось на 201 символе, а что б доходило до ближайшего пробела и потом обрывалось. Предположительно можно сделать так:
    Код (Text):
    1. $txt=substr($txt,0,strrpos($txt, " ",200));
    это нормально, или можно сделать лучше/быстрее/удобнее/правильнее?
     
  2. dAllonE

    dAllonE Guest

    Я не совсем понимаю, что мешает сделать как-то так:

    [sql]
    SELECT `zag`, `txt` FROM `news`
    UNION
    SELECT `zag`, `txt` FROM `stat`
    UNION
    SELECT `zag`, `txt` FROM `worklogs`

    ORDER BY `kogda` DESC
    [/sql]

    ИМХО лучше искать первые . / ... / ! / ?
    И потом уже, если их не будет(что маловероятно) отрезать по пробелу....

    Хотя лучше всего, сделать bb код, что бы автор статьи сам мог указать какой кусок выводить в RSS-ке
     
  3. Mr.M.I.T.

    Mr.M.I.T. Старожил

    С нами с:
    28 янв 2008
    Сообщения:
    4.586
    Симпатии:
    1
    Адрес:
    у тебя канфетка?
    ну и по какой тут 3 таблицы?
     
  4. dAllonE

    dAllonE Guest

    Mr.M.I.T., об этом история умалчивает :)
     
  5. free-bits

    free-bits Активный пользователь

    С нами с:
    13 ноя 2008
    Сообщения:
    296
    Симпатии:
    0
    Адрес:
    г. Красноярск
    Сортировка многомерного массива по ключу date
    PHP:
    1.  
    2. <?php
    3.  
    4. usort($array, "cmp");
    5.  
    6. function cmp($a, $b) {
    7.    return strcmp($a['date'], $b['date']);
    8. }
    9.  
     
  6. el

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

    С нами с:
    23 окт 2006
    Сообщения:
    51
    Симпатии:
    0
    Адрес:
    Ташкент
    Mr.M.I.T. не понял правда что "по какой"?


    Всем спасибо.
     
  7. sylex

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

    С нами с:
    9 ноя 2008
    Сообщения:
    625
    Симпатии:
    0
    Адрес:
    Омск
    можно было использовать одну таблицу, т.к. структура одинакова