2014-09-10 110 views
0

我的SQL代碼有點麻煩。 我有如下表:當然在SQLite3中查看

CREATE TABLE post (
    post INTEGER, 
    content TEXT, 
    time INTEGER, 
    owner TEXT, 
    thread TEXT, 
    pharse TEXT); 

的表有默認值,選項等主人有一個外鍵與用戶的另一個表。列thread可能有多個相同的值。

我想建立這樣一個觀點:

CREATE VIEW thread AS 
SELECT 
    thread, 
    MIN(time) AS creation, 
    owner, 
    pharse, 
    MAX(time) AS last, 
    COUNT(post) as count 
FROM post 
GROUP BY thread 
ORDER BY time DESC; 

thread組我看來,creation是第一篇文章的創建時間,owner是第一篇文章的創造者,pharse是第一篇文章的pharse, last是最新帖子的創建時間,而count是具有相同線程值的所有帖子的計數。

除了MAX(time) AS last之外,一切都會好起來的,這個列強制視圖顯示最後一個帖子的主人,當我想查看第一個主人時。當我從代碼中啓動該行時,一切正常,但我需要它對我的視圖進行排序,這只是因爲我想保留它 - 用於排序。

列的順序對我來說並不重要。我在PHP中使用這些查詢,如果它有任何重要性。

如果有另一種方式或有人可以告訴我如何解決我的代碼,我會很高興。

+0

你試過互換MIN(時間)和MAX(時間)行?稍後MAX可能會強制所有者的值被設置錯誤 – CodeNewbie 2014-09-10 10:11:46

回答

1

爲了防止MAX()從影響查詢的內容,你必須把它移動到一個子查詢:

SELECT thread, 
     MIN(time) AS creation, 
     owner, 
     pharse, 
     (SELECT MAX(time) 
     FROM post AS p2 
     WHERE p2.thread = post.thread 
     ) AS last, 
     COUNT(post) as count 
FROM post 
GROUP BY thread