我有一个如下所示的数据库表:(从PHPMyAdmin导出)
CREATE TABLE IF NOT EXISTS `topics` (
`parent` smallint(6) NOT NULL,
`id` int(11) NOT NULL,
`id2` int(11) NOT NULL,
`title` varchar(256) NOT NULL,
`message` longtext NOT NULL,
`authorid` int(11) NOT NULL,
`timestamp` int(11) NOT NULL,
`timestamp2` int(11) NOT NULL,
PRIMARY KEY (`id`,`id2`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;
基本上,这是包含论坛系统主题的表格。
所以我在创建最新的帖子页面时遇到了问题,我可以将其包含在其他页面上。我想要获取的是最新发布的最新主题。
易说:请注意:id不是自动递增的,因为我在发布主题时使用PHP手动将其设置为即将到来的号码。 AKA我认为LAST_INSERT_ID()不会起作用。
到目前为止我执行此操作的代码发布在Pastebin上:
答案 0 :(得分:0)
这应该这样做:
SELECT
*
FROM
topics
WHERE
id IN ((SELECT id from topics order by id desc limit 1)) /* set a higher limit if you want to pull more recent posts */
ORDER BY
id desc,
id2 asc
在英语中,SQL转换为:
从主题表中获取所有内容
ID是此查询时可用的最高值
按ID排序先升级,然后按降序排列ID2
答案 1 :(得分:0)
我想你只需要这个:
SELECT * FROM topics
ORDER BY id DESC, id2 ASC
LIMIT 1
在旁注中,如果您的字段用于发布时间和编辑时间分别命名为post_time
和edited_time
,而不是timestamp
和{{},我认为您会更开心1}}。 timestamp2
和id
答案 2 :(得分:0)
我不太了解你的要求:P
但是,我能理解的是,您希望主题显示已发布或修改的最新主题。
SELECT * FROM topics ORDER BY id timestamp2 DESC。
如果您正在填写,此查询将起作用,即使创建了主题,也可以使用时间戳。
第二个解决方案
> SELECT * FROM topics ORDER BY id timestamp DESC. in array t1
SELECT * FROM topics ORDER BY id timestamp2 DESC. in array t2
Then merge t1 and t2 in descending order by comparing timestamp field of t1 and timestamp2 field of t2.
然后按降序循环第三个数组...
希望这有效。