2016-12-12 1 views
0

J'ai deux sections avec des jeux et j'ai un problème. Quand est le jeu dans la première section, je ne veux pas la montrer à nouveau dans la deuxième section. Pour les jeux de spectacle dans la première section que je utilise:Sous-requête mySQL avec erreur de limites

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 

montrer Jeux en deuxième section:

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 

J'ai essayé de faire sous-requête comme ceci:

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 

Mais MySQL erreur d'appel: #1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'

Pouvez-vous m'aider s'il vous plaît? Je suis désolé pour mon anglais. J'ai fait de mon mieux.

+0

MySQL ou MariaDB? Voir [MySQL :: C.4 Restrictions sur les sous-requêtes] (https://dev.mysql.com/doc/refman/5.7/fr/subquery-restrictions.html) ou [MariaDB :: Limitations de sous-requête] (https://mariadb.com/kb/fr/mariadb/subquery-limitations/) – wchiquito

+0

Même si cela ne fonctionnait pas, le 'ORDER BY GameDate DESC LIMIT 8 'ne vous donnerait pas nécessairement les mêmes 8 enregistrements dans la sous-requête comme il l'a fait dans la requête de la section 1 (en supposant que GameDate n'est pas unique). Aussi, je suis confus ce que le 'HAVING 1' est pour. Peut-être utile de voir quelques exemples d'enregistrements. – Alan

+0

J'ai beaucoup de jeux avec le même nom et la même date de sortie la seule différence est dans la plate-forme. Par exemple: GTA V pour PS4, Xbox et PC et je veux en montrer un seul, alors j'ai utilisé HAVING 1 sur GamesName. J'ai besoin d'utiliser 'Limid 8' et' commander par GameDate Desc' dans la sous-requête car quand je supprime 'LIMIT 8' Sous-requête retourne tous les jeux donc le résultat ne montre rien et quand je supprime le 'ORDER BY GameDate DEST' Il doesn' t renvoie les jeux lasteted. Si vous voulez je peux vous envoyer quelques screeshots avec databese et site Web comment c'est l'air et comment je le pense. :) – Frederik

Répondre

0

Je l'ai déjà fait. Je fais une nouvelle vue avec le select.

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 

Et puis utilisez PAS avec SELECT de Vue:

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

Je pense qu'il existe une solution plus efficace, mais bien faite. – Strawberry