在SQLite3中查看

时间:2014-09-10 10:03:32

标签: php sql sqlite

我的SQL代码没什么问题。 我有下表:

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是第一篇文章的分析,{ {1}}是上次发布的创建时间,last是具有相同线程值的所有帖子的计数。

除了count之外,一切都会好的,当我想看到第一个帖子的所有者时,此列强制视图显示最后一个帖子的所有者。当我从代码中启动该行时,一切正常,但我需要它来对我的视图进行排序,这只是因为我想保留它 - 用于排序。

列的顺序对我来说毫无意义。如果它有任何重要性,我在PHP中使用这些查询。

如果有其他方式或某人可以告诉我如何修复我的代码,我会很高兴。

1 个答案:

答案 0 :(得分: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