从MySQL表中获取特定数据

时间:2014-04-18 15:52:13

标签: php mysql sql

我有一个如下所示的数据库表:(从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;

基本上,这是包含论坛系统主题的表格。

  • parent表示
  • 中的类别
  • id表示主题ID
  • id2表示回复的顺序(1 =原始帖子,2 =第一次回复等)
  • title表示主题标题
  • 消息表示文字
  • authorid表示消息的作者(存储在不同的数据库中)
  • 时间戳表示发布时间
  • timestamp2表示已编辑的时间

所以我在创建最新的帖子页面时遇到了问题,我可以将其包含在其他页面上。我想要获取的是最新发布的最新主题。

易说:

  • 最高身份
  • 最低id2(AKA id2必须等于1,因为这是第一篇帖子)
  • 从表格中的该行获取所有信息

请注意:id不是自动递增的,因为我在发布主题时使用PHP手动将其设置为即将到来的号码。 AKA我认为LAST_INSERT_ID()不会起作用。

到目前为止我执行此操作的代码发布在Pastebin上:

http://pastebin.com/cyARYeT1

3 个答案:

答案 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_timeedited_time,而不是timestamp和{{},我认为您会更开心1}}。 timestamp2id

也是如此

答案 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.
  

然后按降序循环第三个数组...

希望这有效。