2014-03-31 29 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

相關問題