これは私がgetting-the-last-record-inserted-into-a-select-query選択クエリ内のテーブルの最後のレコードを取得することは
私はアンドレアが1のために正常に動作昨日で私を助けるために親切だったクエリを編集しようとしていますとしていた別の問題のフォローアップであります私は幸運なことなく類似のクエリを作成しようとしています。私はにするために必要なもの
は、すべてのボードは、そのボードにリンクされているトピックやメッセージの数と(仕事をする)最後のメッセージのユーザー、話題と日付をボード名を表示するためにある
何I必要性は、これは私のテーブル構造
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`)
);
と私はアンドレアが私のためにしたクエリに基づくが出ているクエリで話題とメッセージ数
、ボード名を取得することです。ボード名、トピックとメッセージの数(5があっても1と表示されます)、トピックの著者とメッセージの数(必要ではない)、最後の投稿の著者と日付)ではなく
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
この感謝
これはまさに私がやろうとしていたものです。 ちょうど最後の質問ですが、どのように私はトピックのIDと著者の名前にリンクされると思いますトピックテーブルからtopicnameを取得するのですか? – AdRock
更新された投稿を表示 – Quassnoi