За последние 24 часа нас посетили 18415 программистов и 1635 роботов. Сейчас ищут 1594 программиста ...

Получение строк с бОльшими значениями из нескольких таблиц

Тема в разделе "PHP и базы данных", создана пользователем Ruslan, 5 авг 2011.

  1. Ruslan

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

    С нами с:
    15 июл 2009
    Сообщения:
    13
    Симпатии:
    0
    Доброе утро )
    Столкнулся с проблемой.
    Есть три таблиц с объявлениями. В каждой таблице столбцы с id, датой размещения в формате YYYYMMDD (для упрощения поиска) и временем размещения в формате HHMM.
    Подскажите, пожалуйста, каким образом можно получить из этих таблиц 5 последних объявлений, учитывая, что из одной таблицы может быть получено 2 строки, из второй 1, из третьей 2.
    Запарился уже :(
     
  2. Павел Хрушков

    Павел Хрушков Активный пользователь

    С нами с:
    12 май 2011
    Сообщения:
    34
    Симпатии:
    0
    [sql]"SELECT * FROM первая_таблица SORT BY id DESC LIMIT 2"
    "SELECT * FROM вторая_таблица SORT BY id DESC LIMIT 1"
    "SELECT * FROM третья_таблица SORT BY id DESC LIMIT 2"[/sql]
     
  3. Ruslan

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

    С нами с:
    15 июл 2009
    Сообщения:
    13
    Симпатии:
    0
    Если бы все было так легко!
    В том то и дело, что возможно все пять будут получены из одной таблицы.
    Получается, что нужно взять по пять значений из каждой таблицы и отсортировать по дате, но я не могу понять, как все это сделать.
     
  4. tommyangelo

    tommyangelo Старожил

    С нами с:
    6 дек 2009
    Сообщения:
    2.549
    Симпатии:
    0
    Адрес:
    Мариуполь
    может через UNION попробовать?
    (SELECT * FROM table1) UNION (SELECT * FROM table2) UNION (SELECT * FROM table3) ORDER BY id DESC LIMIT 5

    (в работоспособности не уверен)
     
  5. igordata

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

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

    Ruslan
    выбери пять с каждой и по дате их, по дате. что ты паришься? дата может быть представлена в секундах, тогда сортировка выполняется просто одной функцией
     
  6. Ruslan

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

    С нами с:
    15 июл 2009
    Сообщения:
    13
    Симпатии:
    0
    Igordata, а каким способом собрать строки со всех запросов в один массив?[/quote]
     
  7. igordata

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

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    Ruslan
    по дате же
    в цикле типа будет примерно такая строка

    $a[$row['date']] = $row;


    а после цикла сортируй $a и бери первые пять

    только у тебя может быть две объявы на одну дату.

    если дату надо перевести в число - strtotime поможет
     
  8. Chushkin

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

    С нами с:
    17 дек 2010
    Сообщения:
    1.062
    Симпатии:
    91
    Адрес:
    Мещёра, Центр, Болото N3
    Если поправить малость, то всё будет отлично:
    [sql](SELECT * FROM table1 order by id desc limit 5)
    UNION all
    (SELECT * FROM table2 order by id desc limit 5)
    UNION all
    (SELECT * FROM table3 order by id desc limit 5)
    ORDER BY id DESC
    LIMIT 5[/sql]

    Единственное, автору надо с ORDER BY разобраться хорошенько с учётом требования "5 последних из трёх таблиц", - т.е. по каким критериям определяется "последняя": ИД, времени или ещё чему-то.
     
  9. Ruslan

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

    С нами с:
    15 июл 2009
    Сообщения:
    13
    Симпатии:
    0
    Спасибо всем!
    Попробую