SQLinfo.ru - Все о MySQL

Форум пользователей MySQL

Задавайте вопросы, мы ответим

Вы не зашли.

#1 23.11.2016 00:24:16

remenikomer
Завсегдатай
Зарегистрирован: 28.05.2016
Сообщений: 26

Как вывести новые записи из каждого объекта по одной?

Есть записи (новости), они относятся к объекту. Нужно выбрать все последний новости, но взять только по одной, чтобы объекты были уникальными. В итоге должен получится на странице список объектов, а у каждого объекта одна новость. Сейчас сделал с группировкой по объекту, но так выводятся только новые объекты.
Таблицы:

Объекты:
id, name

Новость:
id, object_id, date, moder

Неактивен

 

#2 23.11.2016 00:31:08

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как вывести новые записи из каждого объекта по одной?

Неактивен

 

#3 23.11.2016 11:22:28

remenikomer
Завсегдатай
Зарегистрирован: 28.05.2016
Сообщений: 26

Re: Как вывести новые записи из каждого объекта по одной?

я так понял, подходит 1-й способ. Но как-то встречал и другие способы выборки без группировки, типа:

SET @n=1, @i=0, @p=0;

                SELECT
                    t1.id as object_id,
                    t1.name as object_name

                FROM ".PREFIX."_objects t1

                    INNER JOIN ".PREFIX."_post t2
                        ON t2.objectid = t1.id

                    WHERE @i <= @n AND if( @p=t1.id, @i:=@i+1,(@i:=0) OR (@p:=t1.id) )

                    AND t2.moder = '1' AND t1.active = '1'

Правда я этого не умею

Отредактированно remenikomer (23.11.2016 11:22:50)

Неактивен

 

#4 23.11.2016 11:28:59

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как вывести новые записи из каждого объекта по одной?

remenikomer написал:

я так понял, подходит 1-й способ.

подходит любой (первый проще всего)

remenikomer написал:

Но как-то встречал и другие способы выборки без группировки, типа:

см остальные, с переменными 5-ый, а зачем именно без группировки?

Неактивен

 

#5 23.11.2016 12:11:02

remenikomer
Завсегдатай
Зарегистрирован: 28.05.2016
Сообщений: 26

Re: Как вывести новые записи из каждого объекта по одной?

Никак не получается чего-то


SELECT db_post.id,
  db_post.date,
  db_post.userid,
  db_objects.id AS obj_id
  ,  MAX( db_post.date )

  FROM db_post
    INNER JOIN db_objects
      ON db_objects.id = db_post.objectid

  GROUP BY db_objects.id
 

Выводятся не самые последние посты. Например, есть у объекта два поста, id - время:
422-1469680777
413-1469485755
При выборке выводится 413 пост, хотя время больше у 422. Подскажите, пожалуйста, в чем ошибка?

Неактивен

 

#6 23.11.2016 12:24:42

vasya
Архат
MySQL Authorized Developer
Откуда: Орел
Зарегистрирован: 07.03.2007
Сообщений: 5842

Re: Как вывести новые записи из каждого объекта по одной?

зачем вам db_objects?
обратите внимание, в статье join таблицы на саму себя.
сначала выбирается комбинация (`user_id`,`time`) у вас (objectid, date), потом остальные поля

Неактивен

 

#7 23.11.2016 14:07:52

remenikomer
Завсегдатай
Зарегистрирован: 28.05.2016
Сообщений: 26

Re: Как вывести новые записи из каждого объекта по одной?

Вроде заработало. Спасибо. Сделал так:


SELECT pst1.id, pst1.date, pst1.objectid
  FROM db_post pst1
  JOIN
    (SELECT
        db_post.objectid,
        MAX(db_post.date) as max_date
      FROM db_post  GROUP BY db_post.objectid) AS subpst

  ON subpst.objectid = pst1.objectid AND subpst.max_date = pst1.date

 
 

Отредактированно remenikomer (23.11.2016 14:34:16)

Неактивен

 

Board footer

Работает на PunBB
© Copyright 2002–2008 Rickard Andersson