簡體   English   中英

從MySQL表中獲取特定數據

[英]Fetching specific data from MySQL table

我有一個數據庫表,看起來像這樣:(從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表示主題ID
  • id2表示回復的順序(1 =原始帖子,2 =第一回復,依此類推)
  • title表示主題標題
  • 消息指示文本
  • authorid指示消息的作者(存儲在其他數據庫中)
  • 時間戳指示發布時間
  • timestamp2指示編輯時間

因此,我無法創建可以包含在其他頁面上的最新帖子頁面。 我要獲取的是發布的原始最新主題。

說起來容易些:

  • 最高編號
  • 最低ID2(AKA ID2必須等於1,因為這是第一篇文章)
  • 從表中的該行獲取所有信息

請注意:ID並非自動遞增,因為發布主題時,我使用PHP手動將其設置為即將到來的數字。 又說我不認為LAST_INSERT_ID()將起作用。

到目前為止,我執行此操作的代碼已發布在Pastebin上:

http://pastebin.com/cyARYeT1

應該這樣做:

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降序排列

我認為您只需要這樣:

SELECT * FROM topics
ORDER BY id DESC, id2 ASC
LIMIT 1

在旁注中,如果您將發布時間和編輯時間字段分別命名為post_timeedited_time ,而不是timestamptimestamp2 ,那么我認為您會更加高興。 idid2

我不太了解,您的要求:P

但是,但是我能理解的是,您希望主題顯示發布或修改的最新主題。

SELECT * FROM topic ORDER BY ID id timestamp2 DESC。

如果正在填寫,即使創建主題,此查詢也可以使用時間戳2。

第二解決方案

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

然后以降序循環在第三個數組上...

希望這行得通。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM