รับชื่อคอลัมน์ตารางใน MySQL?


คำตอบ:


536

คุณสามารถใช้DESCRIBE :

DESCRIBE my_table;

หรือในเวอร์ชันที่ใหม่กว่าคุณสามารถใช้INFORMATION_SCHEMA :

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
  WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

หรือคุณสามารถใช้SHOW COLUMNS :

SHOW COLUMNS FROM my_table;

14
DESCRIBE เป็นช็อตคัทสำหรับ SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html )
svens

11
ฉันจะลงคะแนนสำหรับรุ่น Information_Schema เนื่องจากไวยากรณ์นี้ได้รับการสนับสนุนจากฐานข้อมูลหลักส่วนใหญ่ ดีที่สุดที่จะเรียนรู้เพียงวิธีเดียวถ้าคุณต้อง
Kibbee

3
+1 ฉันต้องการเลือกชื่อตารางที่มีคอลัมน์อยู่SELECT TABLE_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = 'db_name' AND COLUMN_NAME = 'col_name';
AL̲̳I

2
บันทึกไบต์โดยใช้desc my_table;:-)
Alfonso Pérez

3
DESCสำหรับการอธิบายสามารถสับสนได้ง่ายDESCสำหรับการลง จำนวนไบต์ที่คุณบันทึกเนื่องจากการอ่านไม่ได้ไม่คุ้มค่า
Jacques Mathieu

34

คำสั่ง SQL ต่อไปนี้ใกล้เคียงกัน:

SELECT COLUMN_NAME
  FROM INFORMATION_SCHEMA.COLUMNS
 WHERE table_name = 'tbl_name'
  [AND table_schema = 'db_name']
  [AND column_name LIKE 'wild']

SHOW COLUMNS
FROM tbl_name
[FROM db_name]
[LIKE 'wild']

การอ้างอิง: INFORMATION_SCHEMA COLUMNS


1
ทำไมคุณถึงพูดว่า "เกือบ"
Pacerier

2
@Pacerier สำหรับสิ่งหนึ่งที่สองจะไม่ทำงานเป็นแบบสอบถามย่อย
WAF

@ WAF ฉันคิดว่าเขาหมายถึงอย่างอื่นไม่เหมือนกัน
Pacerier

2
ในการทดสอบอย่างรวดเร็วของฉันSHOW COLUMNSกลับตารางที่มีชื่อคอลัมน์ประเภท ฯลฯ ในขณะที่SELECT COLUMN NAMEส่งกลับเพียงชื่อคอลัมน์
mwfearnley

20

ฉันสร้างฟังก์ชัน PDO ที่ส่งกลับชื่อคอลัมน์ทั้งหมดในอาร์เรย์อย่างง่าย

public function getColumnNames($table){
    $sql = "SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE table_name = :table";
    try {
        $core = Core::getInstance();
        $stmt = $core->dbh->prepare($sql);
        $stmt->bindValue(':table', $table, PDO::PARAM_STR);
        $stmt->execute();
        $output = array();
        while($row = $stmt->fetch(PDO::FETCH_ASSOC)){
            $output[] = $row['COLUMN_NAME'];                
        }
        return $output; 
    }

    catch(PDOException $pe) {
        trigger_error('Could not connect to MySQL database. ' . $pe->getMessage() , E_USER_ERROR);
    }
}

ผลลัพธ์จะเป็นอาร์เรย์:

Array (
[0] => id
[1] => name
[2] => email
[3] => shoe_size
[4] => likes
... )

ขออภัยสำหรับ necro แต่ฉันชอบฟังก์ชั่นของฉัน;)

ป.ล. ฉันไม่ได้รวมคลาสคอร์ แต่คุณสามารถใช้คลาสของคุณเองได้ DS


อะไรคือสิ่งที่เครื่องรางตัวพิมพ์ใหญ่?
Pacerier

ไม่มีอะไรผิดปกติเมื่อตอบคำถามเก่า ๆ ของ Stack Overflow
bdsl

1
ขอบคุณ สำหรับผลลัพธ์ฉันใช้วิธีนี้: $ columns = $ stmt-> fetchAll (\ PDO :: FETCH_ASSOC); ส่งคืน array_column (คอลัมน์ $, 'COLUMN_NAME');
Ehsan

6

การแก้ปัญหานี้มาจาก mysql บรรทัดคำสั่ง

mysql>USE information_schema;

ในแบบสอบถามด้านล่างเพียงเปลี่ยน <--DATABASE_NAME--> ไปยังฐานข้อมูลของคุณและ <--TABLENAME--> เป็นชื่อตารางของคุณซึ่งคุณต้องการให้ค่าฟิลด์ของคำสั่ง DESCRIBE

mysql> SELECT COLUMN_NAME FROM COLUMNS WHERE TABLE_SCHEMA = '<--DATABASE_NAME-->' AND   TABLE_NAME='<--TABLENAME-->';


4

เกี่ยวกับสิ่งนี้:

SELECT @cCommand := GROUP_CONCAT( COLUMN_NAME ORDER BY column_name SEPARATOR ',\n')
FROM INFORMATION_SCHEMA.COLUMNS 
WHERE TABLE_SCHEMA = 'my_database' AND TABLE_NAME = 'my_table';

SET @cCommand = CONCAT( 'SELECT ', @cCommand, ' from my_database.my_table;');
PREPARE xCommand from @cCommand;
EXECUTE xCommand;

4

นอกจากนี้ยังเป็นที่น่าสนใจที่จะทราบว่าคุณสามารถใช้
EXPLAIN table_nameสิ่งที่มีความหมายเหมือนกันDESCRIBE table_nameและSHOW COLUMNS FROM table_name แม้ว่าEXPLAINจะถูกใช้โดยทั่วไปเพื่อรับข้อมูลเกี่ยวกับแผนการดำเนินการแบบสอบถาม



3

ฟังก์ชั่น MySQL อธิบายตารางควรนำคุณไปยังที่ที่คุณต้องการ (ใส่ชื่อตารางของคุณสำหรับ "table") คุณจะต้องแยกเอาท์พุทบางอย่าง แต่มันค่อนข้างง่าย ดังที่ฉันเรียกคืนถ้าคุณเรียกใช้คิวรีนั้นผลลัพธ์แบบสอบถามของ PHP จะเข้าถึงฟังก์ชันที่ตามปกติแล้วจะให้คู่ของคีย์ - ค่าแก่คุณจะมีชื่อคอลัมน์เป็นคีย์ แต่มันก็ใช้เวลาสักพักแล้วที่ฉันใช้ PHP ดังนั้นอย่าจับฉัน :)


มีเอกสารที่ดีงามอยู่ที่ php.net ภายในus3.php.net/manual/th/function.mysql-list-fields.php
dannysauer

3

คุณอาจต้องการตรวจสอบmysql_fetch_array()เช่นใน:

$rs = mysql_query($sql);
while ($row = mysql_fetch_array($rs)) {
//$row[0] = 'First Field';
//$row['first_field'] = 'First Field';
}

3

ฉันต้องการชื่อคอลัมน์เป็นแบบแฟลตขณะที่คำตอบอื่น ๆ ส่งคืนอาร์เรย์ที่เชื่อมโยงกันดังนั้นฉันจึงใช้:

$con = mysqli_connect('localhost',$db_user,$db_pw,$db_name);
$table = 'people';

/**
* Get the column names for a mysql table
**/

function get_column_names($con, $table) {
  $sql = 'DESCRIBE '.$table;
  $result = mysqli_query($con, $sql);

  $rows = array();
  while($row = mysqli_fetch_assoc($result)) {
    $rows[] = $row['Field'];
  }

  return $rows;
}

$col_names = function get_column_names($con, $table);

ตอนนี้ $ col_ ชื่อเท่ากับ:

(
    [0] => name
    [1] => parent
    [2] => number
    [3] => chart_id
    [4] => type
    [5] => id
)

2

mysql_list_fieldsฟังก์ชั่นที่คุณอาจสนใจ; แต่ในขณะที่รัฐคู่มือ:

ฟังก์ชั่นนี้เลิกใช้แล้ว เป็นที่นิยมใช้mysql_query()ในการออกSHOW COLUMNS FROM table [LIKE 'name']คำสั่งSQL แทน


ฟังก์ชั่นทำงานอย่างไรหากไม่ได้ทำการสืบค้น SQL ไปยังเซิร์ฟเวอร์ ทำไมถึงถูกเลิก?
Pacerier

2

คุณสามารถรับโครงสร้างตารางทั้งหมดโดยใช้คำสั่งง่ายๆ

DESC TableName

หรือคุณสามารถใช้แบบสอบถามต่อไปนี้

SHOW COLUMNS FROM TableName

2

ใน mysql เพื่อรับรายละเอียดคอลัมน์และโครงสร้างตารางโดยทำตามคำหลักหรือแบบสอบถาม

1DESC table_name

2DESCRIBE table_name

3SHOW COLUMNS FROM table_name

4SHOW create table table_name;

5EXPLAIN table_name


2
$col = $db->query("SHOW COLUMNS FROM category");

while ($fildss = $col->fetch_array())
{             
    $filds[] = '"{'.$fildss['Field'].'}"';
    $values[] = '$rows->'.$fildss['Field'].'';
}

if($type == 'value')
{
    return $values = implode(',', $values);
}
else {
     return $filds = implode(',', $filds);
}

1
เพื่อเป็นประโยชน์กับผู้ใช้ในอนาคตคุณสามารถระบุบริบทสำหรับคำตอบของคุณไม่ใช่เฉพาะการถ่ายโอนข้อมูลรหัส
พอลซาหร่า

1

สิ่งนี้ใช้ได้กับฉัน ..

$sql = "desc MyTableName";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
    echo $row[0]."<br>";
}

1

ฉันได้เขียนสคริปต์ PHP ง่าย ๆ เพื่อดึงข้อมูลคอลัมน์ตารางผ่าน PHP: Show_table_columns.php

<?php
$db = 'Database'; //Database name
$host = 'Database_host'; //Hostname or Server ip
$user = 'USER'; //Database user
$pass = 'Password'; //Database user password
$con = mysql_connect($host, $user, $pass);
if ($con) {
    $link = mysql_select_db($db) or die("no database") . mysql_error();
    $count = 0;
    if ($link) {
        $sql = "
            SELECT column_name
            FROM   information_schema.columns
            WHERE  table_schema = '$db'
                   AND table_name = 'table_name'"; // Change the table_name your own table name
        $result = mysql_query($sql, $con);
        if (mysql_query($sql, $con)) {
            echo $sql . "<br> <br>";
            while ($row = mysql_fetch_row($result)) {
                echo "COLUMN " . ++$count . ": {$row[0]}<br>";
                $table_name = $row[0];
            }
            echo "<br>Total No. of COLUMNS: " . $count;
        } else {
            echo "Error in query.";
        }
    } else {
        echo "Database not found.";
    }
} else {
    echo "Connection Failed.";
}
?>

สนุก!


1
โปรดโพสต์คำตอบจริงที่นี่และใช้เฉพาะส่วนสำคัญของคุณเป็นข้อมูลสำรอง / อ้างอิง
ChrisF

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.