วิธีรับชื่อคอลัมน์ทั้งหมดสำหรับตารางทั้งหมดใน MySQL


189

มีวิธีที่รวดเร็วในการรับชื่อคอลัมน์ทั้งหมดจากตารางทั้งหมดMySQLโดยไม่ต้องแสดงรายการตารางทั้งหมดหรือไม่


2
ฉันต้องการเพียงภาพรวมอย่างรวดเร็วผ่านฐานข้อมูล มันจะไม่เป็นรหัสในแอป
Dieter

คำตอบ:


304
select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

นั่นคือสิ่งที่ฉันกำลังมองหา :-) เขียนแอป java ที่ทำสิ่งเดียวกันโดยตอนนี้
dieter

ขอบคุณ! ในการรับชื่อคอลัมน์ให้ใช้สิ่งนี้: เลือก column_name จาก information_schema.columns โดย table_schema = 'your_db' คำสั่งซื้อโดย table_name, ordinal_position
Phil Goetz

สิ่งที่ฉันกำลังมองหา! ขอบคุณ
zookastos

จะรับจำนวนข้อมูลที่กรอกหน้าชื่อคอลัมน์ได้อย่างไร ฉันมีปัญหาเดียวกันพร้อมการนับข้อมูล
Gulmuhammad Akbari

รู้เกี่ยวกับคีย์หลักอย่างไร
David Walser

48

ในการแสดงรายการฟิลด์ทั้งหมดจากตารางใน MySQL:

select * 
  from information_schema.columns 
 where table_schema = 'your_DB_name' 
   and table_name = 'Your_tablename'

27

เป็นการดีกว่าที่คุณใช้แบบสอบถามต่อไปนี้เพื่อรับชื่อคอลัมน์ทั้งหมดได้อย่างง่ายดาย

Show columns from tablename


บางครั้งคุณต้องการโซลูชันที่ไม่ต้องพึ่งพา
แบรดลีย์เอ็มเดวิส

26
SELECT * FROM information_schema.columns
WHERE table_schema = DATABASE()
ORDER BY table_name, ordinal_position

ตั้งแต่ฉันไม่ได้มีตัวแทนพอที่จะแสดงความคิดเห็นนี่คือการปรับปรุงเล็ก ๆ น้อย ๆ (ในมุมมองของฉัน) มากกว่าคำตอบที่ดีกรงขัง Rulez ของ: แทนที่ด้วยWHERE table_schema = 'your_db'WHERE table_schema = DATABASE()


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

17

ในกรณีที่เป็นประโยชน์กับคนอื่น ๆ สิ่งนี้จะให้รายการของคอลัมน์ที่คั่นด้วยจุลภาคในแต่ละตาราง:

SELECT table_name,GROUP_CONCAT(column_name ORDER BY ordinal_position)
FROM information_schema.columns
WHERE table_schema = DATABASE()
GROUP BY table_name
ORDER BY table_name

หมายเหตุ: เมื่อใช้ตารางที่มีคอลัมน์จำนวนมากและ / หรือชื่อฟิลด์ยาวให้ระวังข้อ จำกัดgroup_concat_max_lenซึ่งอาจทำให้ข้อมูลถูกตัดทอน


1
ฉันชอบอันนี้ ... เนื่องจากฉันสามารถคัดลอกชื่อคอลัมน์ทั้งหมดได้อย่างง่ายดาย
jatazoulja

6
<?php
        $table = 'orders';
        $query = "SHOW COLUMNS FROM $table";
        if($output = mysql_query($query)):
            $columns = array();
            while($result = mysql_fetch_assoc($output)):
                $columns[] = $result['Field'];
            endwhile;
        endif;
        echo '<pre>';
        print_r($columns);
        echo '</pre>';
?>

1
ทุกคนที่อ่านสิ่งนี้ในปี 2559 - mysql_query เลิกใช้แล้ว ดีที่สุดที่จะใช้ mysqli ของ PHP ก้าวไปข้างหน้า
JCutting8

5

คล้ายกับคำตอบที่ @suganya โพสต์นี้ไม่ได้ตอบคำถามโดยตรง แต่เป็นทางเลือกที่รวดเร็วกว่าสำหรับตารางเดี่ยว:

DESCRIBE column_name;

สิ่งนี้จะพิมพ์ตารางและไม่ใช่แค่ชื่อคอลัมน์ของตาราง
k0pernikus

4

คำถามคือ:

มีวิธีที่รวดเร็วในการรับชื่อคอลัมน์ทั้งหมดจากตารางทั้งหมดใน MySQL โดยไม่ต้องแสดงรายการตารางทั้งหมดหรือไม่

SQL เพื่อรับข้อมูลทั้งหมดสำหรับแต่ละคอลัมน์

select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

SQL เพื่อรับ COLUMN NAMES ทั้งหมด

select COLUMN_NAME from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position

3

ฉันเขียนสิ่งที่เซ่อนี้มานานแล้วและยังคงใช้จริงตอนนี้แล้ว:

https://gist.github.com/kphretiq/e2f924416a326895233d

โดยทั่วไปจะใช้ "SHOW TABLES" ตามด้วย "DESCRIBE" ในแต่ละตารางจากนั้นแยกออกเป็น markdown

เพียงแก้ไขใต้ "ถ้าชื่อ " และไป คุณจะต้องติดตั้ง pymysql


3

Piggybacking ตามคำตอบของ Nicola ด้วย php ที่อ่านได้

$a = mysqli_query($conn,"select * from information_schema.columns
where table_schema = 'your_db'
order by table_name,ordinal_position");
$b = mysqli_fetch_all($a,MYSQLI_ASSOC);
$d = array();
foreach($b as $c){
    if(!is_array($d[$c['TABLE_NAME']])){
        $d[$c['TABLE_NAME']] = array();
    }
    $d[$c['TABLE_NAME']][] = $c['COLUMN_NAME'];
}
echo "<pre>",print_r($d),"</pre>";

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