MySQL में टेबल कॉलम नाम प्राप्त करें?


300

क्या mysql में किसी तालिका के कॉलम नाम को हथियाने का कोई तरीका है? php का उपयोग करना

जवाबों:


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 FROM my_table;

14
DESCRIBE वास्तव में SHOW COLUMNS ( dev.mysql.com/doc/refman/5.0/en/describe.html ) के लिए एक शॉर्टकट है
svens

11
मैं Information_Schema संस्करण के लिए मतदान करूंगा, क्योंकि यह सिंटैक्स अधिकांश प्रमुख डेटाबेस द्वारा समर्थित है। यदि आपको करना है तो केवल 1 तरीका सीखें।
किबी

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;:-) का उपयोग करके बाइट्स बचाएं
अल्फोंसो पेरेज़

3
DESCवर्णन के DESCलिए उतरने के लिए आसानी से भ्रमित किया जा सकता है । पठनीयता की कमी के लिए आपके द्वारा सहेजे जाने वाले बाइट्स की नाममात्र राशि इसके लायक नहीं है।
जैक्स मैथ्यू

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 रंग


1
आप "लगभग" क्यों कहते हैं?
पचेरियर

2
@Pacerier एक चीज़ के लिए, दूसरा एक सबक्वेरी के रूप में काम नहीं करेगा।
WAF

@WAF, मुझे लगता है कि वह पूरी तरह से कुछ और मतलब था, ऐसा नहीं है।
17

2
मेरे त्वरित परीक्षण में, SHOW COLUMNSस्तंभ नाम, प्रकार, आदि सहित एक तालिका देता है, जबकि SELECT COLUMN NAMEसिर्फ स्तंभ नाम देता है।
mwfearnley

20

मैंने एक पीडीओ फ़ंक्शन बनाया जो सभी कॉलम नामों को एक साधारण एरे में देता है।

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 के लिए क्षमा करें, लेकिन मुझे अपना कार्य पसंद है;)

PS मैंने क्लास कोर को शामिल नहीं किया है लेकिन आप अपनी खुद की क्लास .. डीएस का उपयोग कर सकते हैं


अपर-केस बुत के साथ क्या है?
पचेरियर

स्टैक ओवरफ्लो पर एक पुराने प्रश्न का उत्तर देने में कुछ भी गलत नहीं है।
bdsl

1
धन्यवाद। आउटपुट के लिए मैंने इस तरह से उपयोग किया: $ कॉलम = $ stmt-> fetchAll (\ PDO :: FETCH_DOCOC); वापसी array_column ($ कॉलम, 'COLUMN_NAME');
एहसान

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 फ़ंक्शन वर्णन तालिका आपको वहां मिलनी चाहिए जहां आप जाना चाहते हैं ("तालिका" के लिए अपनी तालिका का नाम रखें)। आपको आउटपुट को पार्स करना होगा, लेकिन यह बहुत आसान है। जैसा कि मुझे याद है, यदि आप उस क्वेरी को निष्पादित करते हैं, तो PHP क्वेरी परिणाम तक पहुँचने वाले कार्यों को सामान्य रूप से आपको एक कुंजी-मूल्य जोड़ी देती है, जिसमें कुंजी के रूप में कॉलम नाम होंगे। लेकिन यह एक समय हो गया है क्योंकि मैंने PHP का उपयोग किया है इसलिए मुझे उस पर पकड़ न दें। :)


वहाँ के भीतर php.net में कुछ बहुत अच्छा डॉक्स हैं us3.php.net/manual/en/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_names अब बराबर है:

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

2

mysql_list_fieldsसमारोह आपकी रुचि की हों; लेकिन, जैसा कि मैनुअल कहता है:

इस फ़ंक्शन को पदावनत किया जाता है। इसके बजाय mysql_query()SQL SHOW COLUMNS FROM table [LIKE 'name']कथन जारी करने के लिए उपयोग करना बेहतर होता है ।


यदि यह सर्वर पर SQL क्वेरी जारी नहीं करता है तो फ़ंक्शन कैसे कार्य करता है? इसे अपदस्थ क्यों किया जा रहा है?
पचेरियर

2

आप साधारण आदेश का पालन करके पूरी तालिका संरचना प्राप्त कर सकते हैं।

DESC TableName

या आप निम्नलिखित क्वेरी का उपयोग कर सकते हैं।

SHOW COLUMNS FROM TableName

2

mysql में कीवर्ड या क्वेरी का अनुसरण करके कॉलम विवरण और तालिका संरचना प्राप्त करने के लिए

1।DESC table_name

2।DESCRIBE table_name

3।SHOW COLUMNS FROM table_name

4।SHOW create table table_name;

5।EXPLAIN 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
कृपया यहां वास्तविक उत्तर पोस्ट करें और केवल एक बैकअप / संदर्भ के रूप में अपने gist का उपयोग करें
क्रिसफ

0

mysqli fetch_field () मेरे लिए काम किया:

if ($result = $mysqli -> query($sql)) {
  // Get field information for all fields
  while ($fieldinfo = $result -> fetch_field()) {
    printf("Name: %s\n", $fieldinfo -> name);
    printf("Table: %s\n", $fieldinfo -> table);
    printf("Max. Len: %d\n", $fieldinfo -> max_length);
  }
  $result -> free_result();
}

स्रोत: https://www.w3schools.com/pHP/func_mysqli_fetch_field.asp

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.