如果一个表只有一列,如何签入sql?

xqk2d5yq  于 2021-06-17  发布在  Mysql
关注(0)|答案(3)|浏览(291)

在我的php代码中,我想从如下表中删除列:

function delete_table_column_db( $table_name, $column_attrs ){
    global $wpdb;
    $res = $wpdb->query( "ALTER TABLE " . $table_name . " DROP " . $column_attrs['name'] );

    if( $res === false ){
        error_log( sprintf("The column %s could not be deleted for the table %s", $column_attrs['name'], $table_name ) );
    }
}

但如果表只有一列,则此函数会出错:

ERROR 1090 (42000): You can't delete all columns with ALTER TABLE; use DROP TABLE instead

所以我想 DROP TABLE 如果它´是表格的最后一列。为此,我需要检查一下´是表的最后一列。有办法吗?

4uqofj5v

4uqofj5v1#

$stmt = $wpdb->query('SELECT * FROM '. $tablename);  
$row_count = $stmt->rowCount(); 
if($row_count==1){
 //drop table  
} 
else{
 //alter table drop columns
}

希望有帮助。

piv4azn7

piv4azn72#

要计算表中的列数,我们需要使用 INFORMATION_SCHEMA.COLUMNS . 只有用户有权访问 INFORMATION_SCHEMA table。
可以按如下方式获取表中的列总数:

SELECT COUNT(*) AS no_of_columns
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_NAME = '$your_table_name' AND 
      TABLE_SCHEMA = '$your_database_name'

所以可以先使用这个查询,得到列数。如果大于1,则可以继续 ALTER TABLE .. DROP COLUMN 查询。
一些值得注意的专栏 information_schema.columns 表是: TABLE_SCHEMA -包含列的表所属的架构(数据库)的名称。 TABLE_NAME -包含列的表的名称。 COLUMN_NAME -列的名称。

dkqlctbz

dkqlctbz3#

基于@madhur bhaiya答案的完整代码:

function delete_table_column_db( $table_name, $column_attrs ){
    global $wpdb;
    $query = "SELECT COUNT(*) AS no_of_columns FROM information_schema.columns WHERE table_name = '{$table_name}'"
    $check_column_count = $wpdb->get_results( $query );
    $nbr_columns = (int) $check_column_count[0]['no_of_columns'];
    if( $check_column_count === 1 ){
        $res = $wpdb->query( "DROP TABLE {$table_name}"  );
    }else{
        $res = $wpdb->query( "ALTER TABLE {$table_name} DROP {$column_attrs['name']}" );
    }
    if( $res === false ){
        error_log( sprintf("The column %s could not be deleted for the table %s", $column_attrs['name'], $table_name ) );
    }
}

相关问题