如何在php中编写复杂的mySQL select

时间:2017-06-09 15:50:09

标签: php mysql

我需要将以下mySQL查询编写成我需要为多个模式执行的PHP格式。此查询生成数据字典。

select  t.table_schema as schema_name, 
    t.table_name,   
        (case when t.table_type = 'BASE TABLE' then 'table' 
         when t.table_type = 'VIEW' then 'view'  
         else t.table_type end) as table_type, 
    c.column_name,  
    c.column_type,
    c.column_default,   
        (case when c.column_key = ' ' then '-'
         when c.column_key = 'MUL' then 'FK'
         else 'PK' end) as column_key,
    c.is_nullable,    
    c.column_comment    
from information_schema.tables as t 
inner join information_schema.columns as c on t.table_name = c.table_name and t.table_schema = c.table_schema 
where t.table_type in('base table', 'view') and t.table_schema = 'testdb'
order by t.table_schema, t.table_name, c.ordinal_position

我尝试在PHP中使用以下语法:

$sql = "select t.table_schema as schema_name, 
            t.table_name,   
                (case when t.table_type = 'BASE TABLE' then 'table' 
                 when t.table_type = 'VIEW' then 'view'  
                 else t.table_type end) as table_type, 
            c.column_name,  
            c.column_type,
            c.column_default,   
                (case when c.column_key = ' ' then '-'
                 when c.column_key = 'MUL' then 'FK'
                 else 'PK' end) as column_key,
            c.is_nullable,    
            c.column_comment    
            from information_schema.tables as t 
            inner join information_schema.columns as c on t.table_name = c.table_name and t.table_schema = c.table_schema 
            where t.table_type in('base table', 'view') and t.table_schema = 'testdb'
            order by t.table_schema, t.table_name, c.ordinal_position";

但是当我执行此操作时,我收到以下错误:

Notice: Undefined index: t.table_schema in C:\laragon\www\createDict.php on line 32
schema_name:

我用它来创建输出(现在只用于第一列):

while($row = $result->fetch_assoc()) 
        {
            echo "schema_name: " . $row["t.table_schema"]."<br>";
        }

如果有人可以帮助我,我真的很感激。谢谢你的时间!

1 个答案:

答案 0 :(得分:1)

在您的查询中,您有:

select t.table_schema as schema_name

因此,一旦您在PHP中得到结果,带有数据的数组将调用此&#34; schema_name&#34;。你应该使用:

echo "schema_name: " . $row["schema_name"]."<br>";

附注:PHP中的结果数组不包含数据中的表名,因此在您选择c.column_type的情况下,您需要使用$row['column_type']获取值 - c.部分。