[ Поиск ] - [ Пользователи ] - [ Календарь ]
Полная Версия: Помогите с выборкой из двух таблиц с сортировкой
Страницы: 1, 2
vuler
Добрый день.
Возник небольшой вопрос по сложной выборке. Есть 2 таблицы с новостями и статьями.
Таблица новостей - (news) id, text, title, date связанная с ней(news_author) id,author
Таблица статей - (stati) id, msg, title, date связанная с ней(stati_author) id,author
Нужно сделать выборку статей и новостей сортированную по дате, т.е. новости и статьи должны идти в перемешку, в зависимости от их даты. Как можно записать sql Запрос? Также для статей и авторов лефт джоним должны подтягиваться их имена. Также по возможно нужно вытянуть количество записей в двух таблицах.
Заранее спасибо smile.gif
Valick
При таком раскладе желательно цену озвучить, рассчитывайте долларов на 50

_____________
Стимулятор ~yoomoney - 41001303250491
sergeiss
vuler, если это заказ. то тему я перенесу в более подходящий раздел. Если это то, что ты хочешь, но не можешь сделать сам, то все-таки давай свои наработки. Или "рассчитывай баксов на 50" (с) wink.gif

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
vuler
Это что такой сложный вопрос получается? smile.gif или Вас всех просто кризис одолел?
Как я вижу решение - в запросе сделать временную таблицу из всех полей двух таблиц и из нее сделать выборку по дате, использую SQL_CALC_FOUND_ROWS, если сработает конечно для временной таблицы.
kaww
Как-то так
select `id`, `text`, `title`, `date`, `author`, `_type` (
(
select `n`.`id`, `n`.`text`, `n`.`title`, `n`.`date`, `na`.`author`, 'news' as `_type` from `news` as `n`
left join `news_author` as `na` on `n`.`id` = `na`.`id`
)
union
(select `s`.`id`, `s`.`msg` as `text`, `s`.`title`, `s`.`date`, `sa`.`author`, 'article' as `_type` from `stati` as `s`
left join `stati_author` as `sa` on `s`.`id` = `sa`.`id`
)
)
as t0
order by `t0`.`date`

А если не опечатался в именах или синтаксических конструкциях - то без "как-то" :)
Valick
vuler, на самом деле сложность рождена непродуманной архитектурой БД. Просто откажитесь от перемешанного вывода статей и новостей, либо меняйте архитектуру БД, сэкономите 50 далларов.



_____________
Стимулятор ~yoomoney - 41001303250491
Valick
kaww, с ростом таблиц икать вы будете всё чаще и чаще wink.gif


_____________
Стимулятор ~yoomoney - 41001303250491
Valick
Цитата (vuler @ 20.01.2015 - 14:02)
Как я вижу решение - в запросе сделать временную таблицу из всех полей двух таблиц

оппаньки, видишь как мозг начинает работать когда речь заходит о бабках))
направление верное, только все поля не нужны (в противном случае это практически то же самое что предложил kaww) выбирай из каждой таблицы id и поле с датой, и того получиться временная таблица с тремя полями, далее сортируй, определяй количество и применяй к ней пагинатор(!) - это сказочно снизит нагрузку на БД при последующем соединении с основными таблицами
когда всё сделаешь, прикинь, кризис или 50 баксов норм за работу))

_____________
Стимулятор ~yoomoney - 41001303250491
kaww
Valick, мы ничего не знаем о количестве записей в таблицах. Предложенный запрос решает задачу здесь и сейчас , а то, что в реальной жизни так, скорее всего, лучше не делать - это очевидно, ну или станет очевидным со временем wink.gif
P.S. Если все сортировки и лимиты выполнять и в суб запросах, то с произвдительностью не должно быть особых проблем
Valick
Цитата (kaww @ 20.01.2015 - 14:38)
Valick, мы ничего не знаем о количестве записей в таблицах.
У меня автоматом всплывает вопрос в голове о размере таблицы, ничего не могу с собой поделать smile.gif


_____________
Стимулятор ~yoomoney - 41001303250491
Valick
Цитата (kaww @ 20.01.2015 - 14:38)
Если все сортировки и лимиты выполнять и в суб запросах, то с произвдительностью не должно быть особых проблем

зато могут (точнее не могут, а они будут) возникнуть вопросы с корректностью результата

_____________
Стимулятор ~yoomoney - 41001303250491
kaww
Цитата (Valick @ 20.01.2015 - 11:47)
зато могут (точнее не могут, а они будут) возникнуть вопросы с корректностью результата

Лично сталкивался с проблемами при сортировки в суб-запросах только на mariaDB , mysql же себя ведет адекватно. Если есть другая инфа по этому поводу, интересно было бы узнать.
sergeiss
Цитата (kaww @ 20.01.2015 - 15:38)
Если все сортировки и лимиты выполнять и в суб запросах

Если мне не изменяет мой склероз, то в подзапросах ЛИМИТ в Мускуле не работает.

_____________
* Хэлп по PHP
* Описалово по JavaScript
* Хэлп и СУБД для PostgreSQL

* Обучаю PHP, JS, вёрстке. Интерактивно и качественно. За разумные деньги.

* "накапливаю умение телепатии" (С) и "гуглю за ваш счет" (С)

user posted image
Valick
kaww, тут не в этом дело, просто пока мы не объединим даты из двух таблиц и не отсортируем, мы физически не можем указывать никакие лимиты. Мы понятия не имеем даже то сколько строк из какой таблицы попадёт в результирующий набор.
Почему я у ТС даже не спрашиваю про пангинатор есть он у него или нет? Да потому что без него просто придётся купить револьвер и стреляться smile.gif


_____________
Стимулятор ~yoomoney - 41001303250491
vuler
Вопросик небольшой
В свих таблицах - id уникальны, а вот если объединить, то id становятся не уникальными. Нужно добавить во временную таблицу колонку с названием таблицы как я понял. Какой синтаксис правильный? подскажите плиз.
CREATE TEMPORARY TABLE `temp`
SELECT `id`, `tab_name`,'date' FROM `stati`,'news'.............;
Быстрый ответ:

 Графические смайлики |  Показывать подпись
Здесь расположена полная версия этой страницы.
Invision Power Board © 2001-2024 Invision Power Services, Inc.