php - 在sqlite3 : looking for SELECT query for an actual composition of members of a certain group中

标签 php sqlite

假设我有一个表,其中包含成员加入和离开该类型组的事件

member_id| action | group   | ts
----------------------------------------
member_1 | joins  | group_a | 1445017260
member_2 | joins  | group_b | 1445017551
member_2 | leaves | group_b | 1445017580
member_3 | joins  | group_a | 1445017860
member_4 | joins  | group_b | 1445017951
member_3 | leaves | group_a | 1445017980
member_3 | joins  | group_b | 1445017990
member_5 | joins  | group_b | 1445018051
member_6 | joins  | group_a | 1445018580
...

我想确定谁在特定时间戳的特定组中。

例如谁在时间戳 1445018680 的 group_b 中(在本例中发生所有事件之后)所需的输出是:

[member_3, member_4, member_5]

我正在使用 php 和 sqlite3。目前,我只看到有机会迭代所有现有成员并进行选择,如下所示:

$inMembers = array();
$ts    = 1445018680;
$group = "group_b";

foreach($members as $member){

  $action = $DB->Select("SELECT * FROM events_$eventid WHERE group = :group AND event_ts <= :ts ORDER BY event_ts DESC LIMIT 1", array(
    "ts"    => $ts,
    "group" => $group,
  ));

  if($action == "joins") $inMembers[] = $member;

}

DB对象是一个抽象层。我希望我的意思很清楚。我猜想有一个更优雅的解决方案。也许没有循环。查询只需要 TS。

感谢您的帮助。 疯狂

最佳答案

此查询获取每个组成员的最新时间戳:

SELECT member_id,
       MAX(event_ts)
FROM events_xxx
WHERE group = :group
  AND event_ts <= :ts
GROUP BY member_id;

要获取这些行的其他列,请将其连接回原始表:

SELECT events.member_id
FROM events_xxx
NATURAL JOIN (SELECT member_id,
                     MAX(event_ts) AS event_ts
              FROM events_xxx
              WHERE group = :group
                AND event_ts <= :ts
              GROUP BY member_id
             ) AS latest_events
WHERE events.action = 'joins';

关于php - 在sqlite3 : looking for SELECT query for an actual composition of members of a certain group中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33583078/

相关文章:

mysql - Rails DISTINCT 查询在迭代时不起作用

sql - sql查询以求和五列中的最少两列中的值

php - 如何使用 Php 脚本读取 MySQL 用户名?

php - 你好,我正在尝试打印从 mysql 时间戳发布以来耗时

php - Mysql搜索所有字符串排列

android - 从 SQLite 数据库的列中获取总和和平均值

Android更改数据库路径问题

ios - SQLite 错误 : too many terms in compound SELECT

php - 这有意义吗 - 功能?

php XML DOM 将特殊字符转换为 and#xYY;