2016-12-12 5 views
0

私はゲームで2つのセクションを持ち、問題があります。最初のセクションにゲームがあるとき、私は2番目のセクションで再び彼女を見せたくありません。第二部でshowゲームの制限付きエラーのあるmySQLサブクエリ

SELECT *,platform.platformName FROM games 
JOIN platform ON(platform.PlatformID=games.GamePlatform) 
WHERE GameDate <= NOW() AND GameSlide = 0 
GROUP BY GameName 
HAVING 1 
ORDER BY `games`.`GameDate` DESC LIMIT 8 

:第一部でshowゲーム私が使用しているために は

SELECT *,platform.platformName 
FROM games 
JOIN platform ON(platform.PlatformID=games.GamePlatform) 
WHERE games.GameID 
NOT IN(
     SELECT GameID 
     FROM games 
     WHERE GameDate <= NOW() AND GameSlide = 0 
     GROUP BY GameName 
     HAVING 1 
     ORDER BY `games`.`GameDate` DESC LIMIT 8 
    ) AND platform.PlatformID = 2 AND GameSlide = 0 
GROUP BY GameName 
HAVING 1 
order by rand(dayofyear(CURRENT_DATE)) LIMIT 8 

しかし、MySQLの:

SELECT *,platform.platformName 
FROM games 
JOIN platform ON(platform.PlatformID=games.GamePlatform) 
WHERE platform.PlatformID = 2 AND GameSlide = 0 
GROUP BY GameName 
HAVING 1 
order by rand(dayofyear(CURRENT_DATE)) 
LIMIT 8 

私はこのようなサブクエリを作ってみましたコールエラー:#1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

私を助けてくれますか? 私の英語はすみません。最善を尽くした。

+0

MySQLやMariaDB? [MySQL :: C.4サブクエリの制限](https://dev.mysql.com/doc/refman/5.7/en/subquery-restrictions.html)または [MariaDB :: Subquery Limitations](https:///mariadb.com/kb/en/mariadb/subquery-limitations/) – wchiquito

+0

これがうまくいきましたが、 'ORDER BY GameDate DESC LIMIT 8 'はサブクエリで同じように8つのレコードを与えるわけではありませんセクション1のクエリ(GameDateが一意でないと仮定します)。また、私はHAVING 1が何をするのか混乱しています。いくつかのサンプルレコードを見るのに役立つかもしれません。 – Alan

+0

私は同じ名前と同じリリース日の多くのゲームを持っています 唯一の違いは、プラットフォームにあります。たとえば、PS4、Xbox、PC用のGTA Vです。その中から1つだけを表示したいので、GamesNameにHAVING 1を使用しました。 'LIMIT 8'サブクエリを削除するとすべてのゲームが返されるので、結果に何も表示されず、' ORDER BY GameDate DEST'を削除するとサブクールで 'Limid 8'と' GameDate Desc'を使用する必要があります。最後のゲームを返します。もしあなたが望むなら、databeseとウェブサイトでいくつかのscreeshotsを送ることができます。それはどのように見え、どういう意味ですか? – Frederik

答えて

0

私はすでにそれを行っています。選択した新しいビューを作成します。

CREATE VIEW Novinky AS SELECT games.GameID FROM games WHERE games.GameDate <= NOW() AND games.GameSlide = 0 GROUP BY games.GameName HAVING 1 ORDER BY `games`.`GameDate` DESC LIMIT 8 

そしてビューからのSELECTでNOT INを使用します。

SELECT *,platform.platformName FROM games JOIN platform ON(platform.PlatformID=games.GamePlatform) WHERE GameID NOT IN (SELECT * FROM novinky) AND platform.PlatformID = 2 AND GameSlide = 0 GROUP BY GameName HAVING 1 order by rand(dayofyear(CURRENT_DATE)) LIMIT 8 
+0

もっと効率的な解決策があると思われますが、うまくいきます。 – Strawberry

関連する問題