Как осуществить MySQL запрос?

Всем привет, знаете, бывают такие моменты, когда ты понимаешь, что у тебя перегруз, и ты не можешь решить казалось бы уже элементарную задачу...

Вопрос в следующем, смотрите, есть таблица:
`id` int(11) NOT NULL AUTO_INCREMENT COMMENT 'Идентификатор',
  `component` varchar(255) NOT NULL COMMENT 'Имя компонента',
  `page_id` int(11) NOT NULL COMMENT 'Идентификатор страницы',
  `user` int(11) NOT NULL COMMENT 'Пользователь',
  `text` text NOT NULL COMMENT 'Текст',
  `datetime` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP COMMENT 'Дата и время создания',


И мне необходимо следующее, допустим, пользователь под идентификатором 1 прокомментировал какую-то публикацию, как он узнает, что после него, эту новость прокомментировал ещё кто-то?

Т.е. как мне обратиться к таблице, необходимо что-то следующее:
`user` = '1' AND "кроме него публикацию комментировал ещё кто то, но вывести тех, кого нет в таблице с уведомленными комментариями"...

Огромнейшее спасибо за любую помощь!

--- --- --- --- ---

Вот получилось нечто такое, обсудим?
select `b`.*
from `f_comments` as `a`
left join `f_comments` as `b`
on `a`.`page_id` = `b`.`page_id`
where `a`.`component` = 'publications' and `a`.`user` = '1' and `b`.`user` != '1'
group by `a`.`page_id`, `b`.`user`


--- --- --- --- ---

Ура, мозг заработал, вот правильный запрос:
select *
from `f_comments`
where `user` != '1' and `id` in (select max(`id`) from `f_comments` group by `page_id`)
order by `datetime` desc


P.S. Как и предполагалось, запрос должен был иметь простой вид, всем спасибо!
  • Вопрос задан
  • 2679 просмотров
Пригласить эксперта
Ответы на вопрос 4
Что-то вроде.
За верность не ручаюсь.

select comment.id
      ,comment.user
      ,comment.news_id
  from comments as comment order by id desc limit 1
  join comments as new_comments on new_comments.news_id = comment.news_id and  new_comments.id > comment.id
Ответ написан
Комментировать
fornit1917
@fornit1917
Если я правильно понял, вам нужно условие "существует комментарий от юзера 1 и сущесвует комментарий от юзера не 1 для одной конкретной страници". Тогда вот это условие:
EXISTS (SELECT 1 FROM comments WHERE user=1 AND page_id=1) 
AND 
EXISTS (SELECT 1 FROM comments WHERE user<>1 AND page_id=1)
Ответ написан
leahch
@leahch
3D специалист. Dолго, Dорого, Dерьмово.
Ну, можно двумя запросами.

1) Получить последнюю дату (lastdate) комментария нашего пользователя
SELECT MAX(datetime) FROM table_name where user=1 AND page_id=123456

2) Получить все записи после даты lasttime
SELECT * FROM table_name WHERE datetime > lastdate AND page_id=123456 ORDER BY datetime DESC


Кажется, можно объединить эти два запроса вместе, но это нужно почитать на mysql
SELECT * FROM table_name WHERE datetime > (SELECT MAX(datetime) FROM table_name where user=1 AND page_id=123456) page_id=123456 ORDER BY datetime DESC


PS. И незабыть сделать индексы по user_id, datetime и page_id. Иначе производительность будет плохая...
Ответ написан
Комментировать
Rsa97
@Rsa97
Для правильного вопроса надо знать половину ответа
SELECT *
    FROM (SELECT `page_id`, max(`datetime`) AS `datetime`
              FROM `f_comments`
              WHERE `user` = {$userId}
              GROUP BY `page_id`) AS `my`
        LEFT JOIN `f_comments` AS `other` ON `other`.`page_id` = `my`.`page_id`
    WHERE `other`.`user` != {$userId}
        AND `other`.`datetime` > `my`.`datetime`
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы