首先,这是我的SQL查询:
SELECT research_cost, tech_name, (SELECT research_cost FROM technologies WHERE research_cost <= USERS_RESEARCH_POINTS_VALUE ORDER BY research_cost DESC LIMIT 1) as research_prev, (SELECT cost FROM technology_costs WHERE id = 18 LIMIT 1) as technology_cost FROM `technologies` JOIN technology_costs ON id = COUNT_OF_TECHS_USER_LEARNED WHERE research_cost > USERS_RESEARCH_POINTS_VALUE ORDER BY research_cost ASC LIMIT 1
网站链接:http : //www.joemajewski.com/fortress/
某些人可能会认为上述查询大小适中,甚至很小;不是我。对我来说,这是我编写过的最大,最复杂的SQL查询之一,因此我将自己推向了极限。
无论如何,查询本身没有语法错误,并且在大多数情况下,它确实可以执行我想要的操作。但是,有一个小问题。
如果mainSELECT子句未返回任何行(“ SELECT research_cost,tech_name从technologiesWHERE research_cost>任何”),则整个查询为空集。
SELECT
technologies
如果有帮助,Fortress是我正在开发的这款游戏。这是一个基于浏览器的MMORPG,用户可以在其中组建一支部队,尝试获得排行榜的头把交椅。技术是一种游戏机制,用户可以购买其统计数据(黄金收入,单位产量等)的升级版。研究是一种游戏机制,可让您通过培训科学家进行研究来学习新技术。这就是查询的全部内容。它掌握了正在研究的当前技术及其研究成本。此外,它还抓住了下一代技术将要花费多少的黄金成本。
所以…有什么办法我可以强制在结果集中至少返回一个空行,因为嵌套的select语句检索脚本中所需的变量,即使外部查询什么也没有返回。或者有人可以更改它,以便始终返回结果。
如果还有其他需要,请告诉我。:)
此查询始终返回至少1行
SELECT * FROM (__your old query__)aaa UNION SELECT NULL as research_cost, NULL as tech_name, NULL as research_prev, ... etc [FROM DUAL] // DUAL is a dummy table in mysql