高级SQL查询(查询和比较中的查询)

时间:2015-03-18 16:41:29

标签: mysql sql database algorithm comparison

:)

我正试图弄清楚我需要的一两个复杂的MySQL查询时,现在正在摸不着头脑。

表"时间戳"由列组成:name,login_time,logout_time

我试图实现的目的是:

简而言之:搜索名称X.找到所有永远不会同时在线的人。如果是这样,如果login_time等于比较帖子logout_time或比较帖子login_time等于搜索到的名称的logout_time,则它获得一个"点"为了概率。

首先,查询应该获取名称为X的所有行,即logout_time为非NULL。

然后使用这些结果(将是多行),将所有结果与logouttime为NOT NULL的表中的所有其他行进行比较,并将login_time和logout_time比较为永远不会同时在线。

有了这个结果,(那些与首次搜索的名字没有同时在线的人)最终检查是否有人有第一个搜索名称login_time等于比较帖子logout_time或比较帖子login_time等于搜索到的名称' s logout_time。

现在我在Java中使用许多单个查询来对MySQL服务器进行所有检查。这是比较我使用和确认工作的在线时间的方法。

p1In,P1Out是搜索到的名称的login_time和logout_time p2In,P2Out是它当前正在比较的一个的login_time和logout_time(一个设置了logout_time(NOT NULL))

        public boolean OnlineAtTheSameTime(long p1In, long p1Out, long p2In, long p2Out) {
    boolean result = false;
    result = ((p1In > p2In || p1Out < p2Out) && (p1Out < p2In || p1Out > p2Out) && (p1In < p2In || p1In > p2Out));
    return result;
}
之后我才检查

if (p1In == p2Out || p2In == p1Out)

//给p2 a&#34;指&#34;概率

我稍后会使用这些信息,使用概率,找出谁感谢他们在彼此之前/之后登录/退出,而同时从未上过线。

由于&#34;大规模&#34;我正在制作大量不必要的查询,我想知道是否所有这些都可以通过一个或多个查询来完成,这些查询可能会为我节省大量数据库负载和大量查询。

非常感谢并期待看到你能想到的东西。 (如果可以,我会上传一行和表结构的图像)

1 个答案:

答案 0 :(得分:0)

  1. 找到同时在线的所有人的ID。

  2. 使用它作为下面的子查询来查找NEVER EVERs:

    FROM real_table
    LEFT JOIN ( SELECT id ... ) AS ever USING (id)
    WHERE ever.id IS NULL