1.问题描述
假设数据库中存在n个游戏订单表,表名格式为game_[0-9a-z]+_order.
已知存在订单号18demo000001,如何比较高效地查出这个订单在哪个游戏表?
2.自己做的思考
目前能想到的就是先列出所有的游戏表
show tables like "game_%_order"
然后再手动一个一个地查,但是这样效率太低。
是否有更好的方法比较高效的查询?
3.注:仅讨论该场景的解决方法,不必讨论该场景的合理性。实际上订单号是有游戏信息的,但是不知道为何没有落到它对应的游戏的游戏表中,所以需要进行整个库的全表查询。请把表和订单当成没有任何关系
4.另注:谢谢大家的回答,看来并没有更好的方案了,本来想着能否使用show tables like "game_%_order"去获得全部表名的数组。然后select * from 表名数组 where orderID = "18demo000001" 的思路去解决的。但是无论是show tables 赋值给数组,还是select from 数组,这个在mysql中都好像不能实现。
后来者如果在这条思路上有相关的实现欢迎回答讨论,目前的做法是手动查了一百多种表找到了出错数据所在的位置。
具体做法是
update game_demo1_order set ext1 = "debug" where orderID = "18demo000001";
update game_test2_order set ext1 = "debug" where orderID = "18demo000001";
......
update game_table100_order set ext1 = "debug" where orderID = "18demo000001";
如果这个表有这个数据,navicat(mysql命令行或者其他工具应该也)会提示受影响的行: 1,如果这个表没数据,会提示受影响的行: 0
其中ext1是表中的预留字段或者说无实际意义并且不影响业务的字段
写100行update使用了一些小技巧,复制show tables like "game_%_order"的结果(表名)到sublime,使用find all找\n,使多光标出现在每一行,输入update和set ext1 = "debug" where orderID = "18demo000001";
拿到结果后复制到sublime,全局搜索即可