2014-03-31 48 views
1

OK我有三个表RegionName(Key,Name),Players(Key,Name,Seen)和regionplayers(key,regionkey,playerkey)MYSQL:根据表B中用户的日期选择

有更多的每个表,但它不是必要的,所以使这更容易我只包括什么是需要的。 我有地区,一名球员可以加入一个地区,一个地区可能有很多球员,球员可以在很多地区。有1680个地区,900个参赛者和大约3500个条目将它们连接在一起。

我希望能够找到地区,在8天以上没有看到任何玩家。

我有什么大气压是:

SELECT RegionName.*, RegionPlayer.*, Players.* 
FROM RegionName 
JOIN RegionPlayer 
    ON RegionPlayer.Regionkey= RegionName.Key 
JOIN Players 
    ON Players.Key = RegionPlayer.Playerkey 
WHERE 
    (Seen <= (NOW() - INTERVAL 8 DAY ))) 
    AND RegionName.Perent = 'none' 
    ORDER BY `RegionName`.`Name` ASC, 
    Players.Seen DESC 

目前我得到的所有区域,其中谁没有见过8+天,所以如果一个区域有1名球员谁尚未看过的人,它被退回,但我只想要每个人都离开了8天以上的区域。

这是一种抽样,如果每个表的数据,这是由我刚刚完成。因为它更容易,然后试图提取足够的数据,并提供我想要的结果。

RegionName 
    key Name 
    1 regionone 
    2 regiontwo 
    3 regionthree 
    4 regionfouor 
    5 regionfive 

Players 
    Key  Name Seen 
    1  jack 2014-03-21 12:43:46 
    2  joe  2014-03-26 12:43:46 
    3  bob  2014-03-20 12:43:46 
    4  bill 2014-03-19 12:43:46 
    5  dave 2014-03-17 12:43:46 
    6  tina 2014-03-28 12:43:46 
    7  tony 2014-03-29 12:43:46 
    8  george 2014-03-15 12:43:46 
    9  sam  2014-03-18 12:43:46 
    10  frank 2014-03-18 12:43:46 

RegionPlayer 
    key Regionkey PlayerKey 
    1 1   1 
    2 1   4 
    3 1   5 
    4 2   1 
    5 2   4 
    6 2   2 
    7 3   6 
    8 3   1 
    9 3   7 
    10 4   1 
    11 4   8 
    12 4   7 
    13 4   5 
    14 5   3 

所以,我要在此基础上的数据找回地区首域,& regionfive。

回答

1
SELECT RegionName.*, RegionPlayer.*, Players.* 
FROM RegionName 
JOIN RegionPlayer 
    ON RegionPlayer.Regionkey= RegionName.Key 
JOIN Players 
    ON Players.Key = RegionPlayer.Playerkey 
WHERE RegionName.Perent = 'none' 
GROUP BY RegionName.Name 
HAVING 
    SUM(Seen > (NOW() - INTERVAL 8 DAY)) =0 
    ORDER BY `RegionName`.`Name` ASC, 
    Players.Seen DESC 
+0

谢谢,这看起来像我想要的,有一些奇怪的结果。但是这看起来像我希望的最好的。感谢您的回答,我不认为我曾经使用过HAVING。 – TheDuncan