【发布时间】:2016-12-12 12:02:27
【问题描述】:
我有两个游戏部分,但我遇到了问题。什么时候在第一部分比赛我不想在第二部分再次显示她。 对于我正在使用的第一节中的表演游戏:
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 platform.PlatformID = 2 AND GameSlide = 0
GROUP BY GameName
HAVING 1
order by rand(dayofyear(CURRENT_DATE))
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 调用错误:#1235 - This version of MariaDB doesn't yet support 'LIMIT & IN/ALL/ANY/SOME subquery'
你能帮帮我吗? 对不起我的英语。我尽力了。
【问题讨论】:
-
MySQL 还是 MariaDB?见MySQL::C.4 Restrictions on Subqueries 或MariaDB::Subquery Limitations
-
即使这确实有效,
ORDER BY GameDate DESC LIMIT 8'不一定会在子查询中为您提供与第 1 节查询中相同的 8 条记录(假设 GameDate 不是唯一的)。我也很困惑HAVING 1的用途。查看一些示例记录可能会有所帮助。 -
我有很多同名同发行期的游戏,唯一的区别是平台不同。例如:适用于 PS4、Xbox 和 PC 的 GTA V,我只想显示其中一个,所以我在 GamesName 上使用了 HAVING 1。我需要在子查询中使用
Limid 8和order by GameDate Desc,因为当我删除LIMIT 8子查询时会返回所有游戏,所以结果不会显示任何内容,当我删除ORDER BY GameDate DEST时它不会返回最新的游戏。如果你愿意,我可以向你发送一些带有数据库和网站的截图,它的外观和我的意思。:) -
这里是一些截图:prnt.sc/dinrtz(网站)prnt.sc/dinsh3(我正在使用的表格)