Доброе утро ) Столкнулся с проблемой. Есть три таблиц с объявлениями. В каждой таблице столбцы с id, датой размещения в формате YYYYMMDD (для упрощения поиска) и временем размещения в формате HHMM. Подскажите, пожалуйста, каким образом можно получить из этих таблиц 5 последних объявлений, учитывая, что из одной таблицы может быть получено 2 строки, из второй 1, из третьей 2. Запарился уже
[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]
Если бы все было так легко! В том то и дело, что возможно все пять будут получены из одной таблицы. Получается, что нужно взять по пять значений из каждой таблицы и отсортировать по дате, но я не могу понять, как все это сделать.
может через UNION попробовать? (SELECT * FROM table1) UNION (SELECT * FROM table2) UNION (SELECT * FROM table3) ORDER BY id DESC LIMIT 5 (в работоспособности не уверен)
tommyangelo жестоко. Ruslan выбери пять с каждой и по дате их, по дате. что ты паришься? дата может быть представлена в секундах, тогда сортировка выполняется просто одной функцией
Ruslan по дате же в цикле типа будет примерно такая строка $a[$row['date']] = $row; а после цикла сортируй $a и бери первые пять только у тебя может быть две объявы на одну дату. если дату надо перевести в число - strtotime поможет
Если поправить малость, то всё будет отлично: [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 последних из трёх таблиц", - т.е. по каким критериям определяется "последняя": ИД, времени или ещё чему-то.