2016-12-12 1 views
0

게임이 두 개인 섹션이 있는데 문제가 있습니다. 첫 번째 섹션의 게임은 두 번째 섹션에서 다시 보여주고 싶지 않습니다. 제 2 부에서 쇼 게임한계가있는 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 

: 첫 번째 섹션에서 쇼 게임 내가 사용에 대한 는

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와 그 중 하나만 보여주고 싶습니다. 그래서 GamesName에서 1을 사용했습니다. 'LIMIT 8'하위 쿼리를 삭제할 때 모든 게임을 반환하므로 결과에 아무 것도 표시되지 않고 'ORDER BY GameDate DEST'를 삭제하면 'Limid 8'및 'GameDate Desc by order by Subgury'를 사용해야합니다. t는 lasteted 게임을 반환합니다. 원하는 경우 databese 및 웹 사이트와 함께 일부 screeshot을 보낼 수 있습니다. 모양과 모양은 어떻게 의미합니까? :) – 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에 사용하지 않을 :

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