PDO场景下如何在MySQL SELECT中保留首列同时查询所有列(无需自连接)
解决PDO保留用作特殊操作的首列问题
嘿,这个场景我太熟悉了!MySQL直接用SELECT classasmyclass, * FROM mytable`确实会报错,因为它的语法解析器没法正确处理“别名列 + 无表限定符的*”这种组合。不过有个超简单的办法,不用自连接也不用手动列出所有字段:
- 正确的SQL写法:
SELECT `class` AS `myclass`, mytable.* FROM `mytable`
为什么这个写法可行?
当你给*加上表名限定符(mytable.*)时,MySQL能明确识别出:先取你重命名的myclass列,再取出mytable里的所有原始列。这样结果集里会同时保留myclass(用来给PDO做类实例化/哈希键)和原始的class列,完全满足你的需求。
额外小提示
如果你不在意列的顺序,也可以把*放在前面:
SELECT mytable.*, `class` AS `myclass` FROM `mytable`
不过这种写法里myclass会排在所有原始列的后面,要是PDO必须依赖第一列做特殊操作的话,还是第一种写法更合适。
亲测这个方法在MySQL各个版本里都能正常运行,而且完全不用折腾自连接或者列全字段名,省心多了!
内容的提问来源于stack exchange,提问作者Rudiger W.
相关产品推荐
相关产品推荐

