好的我有三个表RegionName(密钥,名称),玩家(密钥,名称,看到)和区域播放器(密钥,区域密钥,播放器密钥)
每个表都有更多,但不需要它,所以为了使这更容易,我只包含了所需的内容。 我有区域,一个玩家可以添加到一个区域,一个区域可以有很多玩家,玩家可以在很多地区。表格中有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
所以我应该根据这些数据获取区域regionone&amp; regionfive。
答案 0 :(得分: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