получить последнюю запись таблицы в запросе выбора - PullRequest
0 голосов
/ 07 апреля 2009

Это продолжение еще одной проблемы, с которой я столкнулся с получением последней записи, вставленной в выбранный запрос

Я пытаюсь отредактировать запрос, который Андреа был достаточно любезен, чтобы помочь мне вчера, который отлично работает для одной страницы, но я пытаюсь создать подобный запрос без особой удачи.

Мне нужно, чтобы на каждой доске отображалось название доски, количество тем и сообщений, связанных с этой доской, а также пользователь, тема и дата последнего сообщения (которое работает)

Мне нужно получить название форума, тему и количество сообщений

Это моя структура таблицы

CREATE TABLE `boards` (
  `boardid` int(2) NOT NULL auto_increment,
  `boardname` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`boardid`)
);

CREATE TABLE `messages` (
  `messageid` int(6) NOT NULL auto_increment,
  `topicid` int(4) NOT NULL default '0',
  `message` text NOT NULL,
  `author` varchar(255) NOT NULL default '',
  `date` datetime(14) NOT NULL,
  PRIMARY KEY  (`messageid`)
);

CREATE TABLE `topics` (
  `topicid` int(4) NOT NULL auto_increment,
  `boardid` int(2) NOT NULL default '0',
  `topicname` varchar(255) NOT NULL default '',
  `author` varchar(255) NOT NULL default '',
  PRIMARY KEY  (`topicid`)
);

и запрос, который я придумал, основываясь на запросе, который Андреа сделала для меня. Что этот запрос выводит в названии форума, количестве тем и сообщений (в котором написано 1, хотя их 5), автора темы и количества сообщений (в котором нет необходимости), автора и даты последнего сообщения (которое необходимо ) но не название темы, которая нужна

SELECT b.boardname, count( DISTINCT t.topicname ) AS topics, count( lm.message ) AS message, t.author as tauthor, 

      (select count(message) from messages m where m.topicid = t.topicid) AS messagecount, 
       lm.author as lauthor, lm.date
  FROM topics t
  INNER JOIN messages lm
    ON lm.topicid = t.topicid AND lm.date = (SELECT max(m2.date) from messages m2)
  INNER JOIN boards b
    ON b.boardid = t.boardid
  GROUP BY t.topicname

Это мой оригинальный запрос, который делает то, что я хотел, но получаю первое сообщение, а не последнее

SELECT b.boardid, b.boardname, count( DISTINCT t.topicname ) AS topics, count( m.message ) AS message, m.author AS author, m.date AS date, t.topicname AS topic
FROM boards b
INNER JOIN topics t ON t.boardid = b.boardid
INNER JOIN messages m ON t.topicid = m.topicid
INNER JOIN (

SELECT topicid, MAX( date ) AS maxdate
FROM messages
GROUP BY topicid
) test ON test.topicid = t.topicid
GROUP BY boardname
ORDER BY boardname

любая помощь с этим очень ценится

Ответы [ 2 ]

5 голосов
/ 07 апреля 2009

Вам необходимо определить «LAST» в терминах предложения ORDER BY. После этого вы можете просто изменить направление своего заказа и добавить LIMIT 1 к запросу.

2 голосов
/ 07 апреля 2009
SELECT  b.*, m.*, t,*
        (
        SELECT  COUNT(*)
        FROM    topics ti
        WHERE   ti.boardid = b.boardid
        ) AS topiccount,
        (
        SELECT  COUNT(*)
        FROM    topics ti, messages mi
        WHERE   ti.boardid = b.boardid
                AND mi.topicid = ti.topicid
        ) AS messagecount
FROM    boards b
LEFT JOIN
        messages m
ON      m.messageid = (
        SELECT  mii.messageid
        FROM    topics tii, messages mii
        WHERE   tii.boardid = b.boardid
                AND mii.topicid = tii.topicid
        ORDER BY
                mii.date DESC
        LIMIT 1
        )
LEFT JOIN
        topics t
ON      t.topicid = m.topicid
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...