从未知表名中选择

30byixjq  于 2021-06-21  发布在  Mysql
关注(0)|答案(1)|浏览(321)

如何从不同的table上网?

  1. SELECT count(online) FROM (SELECT UserTableName FROM `name`) WHERE online = 1
  2. --------------
  3. UserTableName
  4. --------------
  5. users_1
  6. users_2
  7. users_3
  8. --------------
  9. users_x
  10. --------------
  11. 1
  12. 0
  13. 0
  14. 1

我需要从不同的表中获取联机和表名示例:

  1. -----------------
  2. online | table
  3. -----------------
  4. 5| users_1
  5. 3| users_2
  6. 9| users_3
mcvgt66p

mcvgt66p1#

如果每个用户有一个表,那么可以通过编程方式创建一个sql语句(从链接表中获取不同的表名并将它们联合起来),然后提交。https://dev.mysql.com/doc/refman/5.7/en/sql-syntax-prepared-statements.html
举个例子

  1. MariaDB [sandbox]> select id,username from users where id < 3;
  2. +----+----------+
  3. | id | username |
  4. +----+----------+
  5. | 1 | John |
  6. | 2 | Jane |
  7. +----+----------+
  8. 2 rows in set (0.00 sec)
  9. MariaDB [sandbox]> select * from john;
  10. +--------+
  11. | online |
  12. +--------+
  13. | 1 |
  14. | 0 |
  15. +--------+
  16. 2 rows in set (0.00 sec)
  17. MariaDB [sandbox]> select * from jane;
  18. +--------+
  19. | online |
  20. +--------+
  21. | 1 |
  22. | 1 |
  23. +--------+
  24. 2 rows in set (0.00 sec)

此代码

  1. SET @SQL =
  2. (
  3. SELECT GROUP_CONCAT(GCSTRING)
  4. FROM
  5. (
  6. SELECT 'A' AS GC,CONCAT(sstring,name,fstring, usertable,ustring) gcstring
  7. FROM
  8. (
  9. SELECT DISTINCT 'select count(*) as online # ' as sstring, concat(char(39),username,char(39)) as name,
  10. ' as user from ' as fstring, username AS usertable, ' Where online = 1 UNION ' as USTRING from users where id < 3
  11. ) S
  12. ) T
  13. GROUP BY GC
  14. )
  15. ;
  16. SET @SQL = REPLACE(@SQL,',',' ');
  17. SET @SQL = REPLACE(@SQL,'#',',');
  18. SET @SQL = SUBSTRING(@SQL,1,LENGTH(@SQL) - 6);
  19. SET @SQL = CONCAT(@SQL,';');
  20. # SELECT @SQL;
  21. prepare stmt1 from @sql;
  22. execute stmt1;
  23. deallocate prepare stmt1;

生成此结果

  1. +--------+------+
  2. | online | user |
  3. +--------+------+
  4. | 1 | John |
  5. | 2 | Jane |
  6. +--------+------+
  7. 2 rows in set (0.00 sec)
展开查看全部

相关问题