Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/api/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Mysql 从所有表中选择_Mysql - Fatal编程技术网

Mysql 从所有表中选择

Mysql 从所有表中选择,mysql,Mysql,我的数据库中有很多表,都具有相同的结构。我想从所有表中进行选择,而不必像这样列出所有表: SELECT name FROM table1,table2,table3,table4 我试过了,但没用: SELECT name FROM * 有没有一种方法可以选择数据库中的所有表,而不在查询中列出每个表?听起来像是要将每个表合并在一起,这样就可以得到结果,就像它们是一个大表一样。您需要像这样完整地写出查询 SELECT * FROM table1 UNION SELECT * FROM tabl

我的数据库中有很多表,都具有相同的结构。我想从所有表中进行选择,而不必像这样列出所有表:

SELECT name FROM table1,table2,table3,table4
我试过了,但没用:

SELECT name FROM *

有没有一种方法可以选择数据库中的所有表,而不在查询中列出每个表?

听起来像是要将每个表合并在一起,这样就可以得到结果,就像它们是一个大表一样。您需要像这样完整地写出查询

SELECT * FROM table1 UNION SELECT * FROM table2 UNION ... SELECT * FROM tableN
复制和粘贴可能是您在这里的朋友


我很好奇为什么有许多不同的表具有相同的结构?

据我所知,没有这样的通配符可以从*所有表中选择。我建议您先写一个视图,然后再调用该视图,这样您就不用每次都写出名称了–伏都教我找到了一个解决方案,但我还是想知道是否有更简单的方法或更好的解决方案

但我想到的是:

$tables = mysql_query("show tables");
$string = '';
while ($table_data = mysql_fetch_row($tables)){
    $string.=$table_data[0].',';
}   
$ALL_TABLES = substr($string,0,strlen($string)-1);
$sql="SELECT name FROM $ALL_TABLES ";

这意味着您不应该有很多具有相同结构的表。 但是只有一个表和一个字段来区分不同类型的数据,不管它是什么

那么全选就没有问题了


我正在开发一个在线文件浏览器,每个目录都有自己的表

这是非常无用的,因为一个原因:当你有大约200个文件时,这种情况是真实的,是吗?你们大约有200张桌子。如果每个目录中有大约1000个文件。。等等。在一段时间内,您要么在从数据库中进行选择时处理速度较慢,要么必须购买更多服务器资源


我认为您应该更改数据库结构:只需从向表中添加parent\u folder\u id列开始,然后您就可以将所有行文件和目录放在表中,因为目录也是一个文件,在这里您可以添加type column来确定这一点。

您可以像下面的代码一样通过光标生成SELECT 并在sql server中逐步查找所有结果:

--Author: Ah.Ghasemi

Declare @Select sysname;

DECLARE A CURSOR  
    FOR Select 'select ' + '*' + ' from ' + name 
        from sys.tables
        --Where  name like 'tbl%'
        Order by name
OPEN A 
FETCH NEXT FROM A INTO @Select
    While (@@FETCH_STATUS <>-1)
        Begin
            exec sp_executesql @Select

            FETCH NEXT FROM A INTO @Select;
        End

close A
Deallocate A
如果问题没有解决,请告诉我们


我希望你一切顺利

我正在开发一个在线文件浏览器,每个目录都有自己的表文件/图片/、文件/视频/、文件/音乐/等等,每个表中的记录都是文件的详细信息、大小、名称描述等等。最初,我将所有文件列在一个表中。但我有5000多条记录,查询速度很慢,所以现在每次我添加目录时都会自动创建表,每次上传文件时都会自动存储记录,现在我尝试为用户创建一个搜索函数,我想搜索所有目录或表每个目录都有自己的表OMG当查询速度慢,有5000条记录时,是时候做一些索引或重新调整表结构了。为每个目录创建一个表比使用一个具有适当索引和设计的表更容易造成性能问题。您的设计中存在严重缺陷。当查询在一个只有5K条记录的表上变得缓慢时,这对于任何数据库引擎来说都是微不足道的,你应该优化你的表结构和查询。DRCOLOSOS-最多我会有50个表,我并不是说查询很慢。对不起,我的脚本很慢,因为我有一个scan.php脚本,它会循环遍历目录和子目录中的所有文件。为jpg和flv文件创建一个缩略图,然后将记录插入到文件表中此脚本还将检查文件表中的文件,如果文件不存在,它将删除该记录。老实说,现在想想,我不知道为什么我决定为每个目录创建一个表,我想这在当时似乎是个好主意。但现在我一次扫描一个目录,我仍然认为您希望将每个表合并在一起,因为在FROM子句中指定table1、table2、table3等意味着您希望合并表,而不是按顺序追加表,并且不包括任何合并条件意味着您将得到笛卡尔积。我不推荐这种方法,但我有一个提示给你:是的,好吧,我整晚都在努力把事情做好。我的解决方案不起作用,因为当我尝试从$ALL_TABLES运行SELECT name时,出现了以下错误MySQL错误:1052-字段列表中的“id”列不明确,所以我最终创建了一个包含表中所有文件的搜索表,我只对该表进行了全文搜索。您可能需要进行联合-您下面的解决方案可以调整以创建一个动态sql语句类似于“Select*FROMTABLE1 union Select*FROMTABLE2UNION..”,但这听起来像是一个非常糟糕的应用程序设计。如果有相同结构的表,则应该考虑将数据放入一个表中!最后,有一个人对整体解决方案提出了质疑。