जवाबों:
INFORMATION_SCHEMA मेटाडेटा वर्चुअल डेटाबेस का उपयोग करने का सबसे अच्छा तरीका है । विशेष रूप से INFORMATION_SCHEMA.COLUMNS तालिका ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
यह बहुत शक्तिशाली है, और आपको पाठ को पार्स करने की आवश्यकता के बिना जानकारी दे सकता है (जैसे स्तंभ प्रकार, चाहे स्तंभ अशक्त हो, अधिकतम स्तंभ आकार, वर्ण सेट, आदि ...)
ओह, और यह मानक एसक्यूएल (जबकि SHOW ...
एक MySQL विशिष्ट विस्तार है) ...
तालिकाओं के बीच अंतर SHOW...
और उपयोग करने के बारे में अधिक जानकारी के लिए INFORMATION_SCHEMA
, सामान्य रूप से MySQL दस्तावेज़ीकरण देखेंINFORMATION_SCHEMA
...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
हाथ से पहले भी हो सकता है , लेकिन मैं वास्तव में ऐसा नहीं है। और पहचानकर्ता परिसीमन के लिए मेरे पास कोई समस्या नहीं है। वास्तव में, मैं उन्हें दोहरे उद्धरण चिह्नों से बेहतर पसंद करता हूं (दोहरे उद्धरण मुझे प्रश्न गलत लगता है) ... प्रत्येक को अपने स्वयं के ...
आप MYSQL के लिए निम्नलिखित क्वेरी का उपयोग कर सकते हैं:
SHOW columns FROM your-table;
नीचे उदाहरण कोड है जो दिखाता है कि कॉलम के नामों को सूचीबद्ध करने के लिए php में सिंटैक्स से ऊपर कैसे लागू किया जाए:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
SHOW COLUMNS FROM TABLE
यात्रा के उत्पादन के बारे में विवरण के लिए: MySQL Refrence।
DESC TableName;
;-)
लगता है 2 तरीके हैं:
DESCRIBE `tablename`
या
SHOW COLUMNS FROM `tablename`
DESCRIBE
यहाँ पर अधिक : http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
बस के लिए एक शॉर्टकट है SHOW COLUMNS FROM
।
DESC
भी कम हाथ के लिए है DESCRIBE
!
संपादित करें : आज मैंने इसे करने का बेहतर तरीका सीखा। कृपया ircmaxell का उत्तर देखें।
का आउटपुट पार्स करें SHOW COLUMNS FROM table;
यहाँ इसके बारे में और अधिक जानकारी दी गई है: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
mysql_fetch_field()
सभी कॉलम डेटा देखने के लिए उपयोग करें । मैनुअल देखें ।
$query = 'select * from myfield';
$result = mysql_query($query);
$i = 0;
while ($i < mysql_num_fields($result))
{
$fld = mysql_fetch_field($result, $i);
$myarray[]=$fld->name;
$i = $i + 1;
}
"चेतावनी यह विस्तार PHP 5.5.0 के रूप में पदावनत है, और भविष्य में हटा दिया जाएगा।"
mysqli_num_fields()
और mysqli_fetch_field_direct()
अद्यतित विधियाँ हैं
एक पुराने PHP फ़ंक्शन "mysql_list_fields ()" को हटा दिया गया है। इसलिए, आज खेतों का नाम पाने का सबसे अच्छा तरीका एक क्वेरी "SHOW COLUMNS FROM table_name [LIKE 'name]] है।" तो, यहाँ एक छोटा सा उदाहरण है:
$fields = array();
$res=mysql_query("SHOW COLUMNS FROM mytable");
while ($x = mysql_fetch_assoc($res)){
$fields[] = $x['Field'];
}
foreach ($fields as $f) { echo "<br>Field name: ".$f; }
function get_col_names(){
$sql = "SHOW COLUMNS FROM tableName";
$result = mysql_query($sql);
while($record = mysql_fetch_array($result)){
$fields[] = $record['0'];
}
foreach ($fields as $value){
echo 'column name is : '.$value.'-';
}
}
return get_col_names();
निश्चित नहीं है कि यह वही है जो आप ढूंढ रहे थे, लेकिन यह मेरे लिए काम कर रहा है:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
यह तार तालिका के रूप में स्तंभ नामों / चर नामों का एक सरल सरणी देता है या तार के रूप में सरणी, जो कि मुझे गतिशील रूप से नए SQL क्वेरी बनाने की आवश्यकता है। मेरी हताशा यह थी कि मुझे नहीं पता कि PHP में सरणियों को कैसे अच्छी तरह से अनुक्रमित किया जाता है, इसलिए मुझे यकीन नहीं था कि DESC या SHOW के परिणामों के साथ क्या करना है। आशा है कि मेरा उत्तर मेरी तरह शुरुआती लोगों के लिए उपयोगी है!
परिणाम की जांच करने के लिए: print_r($col_names);
जब आप कुछ दायर के साथ अपनी सभी तालिका संरचना की जांच करना चाहते हैं तो इस कोड का उपयोग करें। इस क्वेरी में मैं अधिक विवरण के लिए column_name, column_type और table_name का चयन करता हूं। मैं column_type द्वारा ऑर्डर का उपयोग करता हूं ताकि मैं इसे आसानी से देख सकूं।
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
यदि आप केवल दर्ज किए गए दोहरे प्रकार की जांच करना चाहते हैं तो आप इसे आसानी से कर सकते हैं
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' AND DATA_TYPE like '%bigint%' order by DATA_TYPE;
यदि आप जांचना चाहते हैं कि कौन सा फ़ील्ड अशक्त प्रकार की अनुमति देता है तो आप इसका उपयोग कर सकते हैं
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME,IS_NULLABLE,DATA_TYPE
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' and DATA_TYPE like '%bigint%' and IS_NULLABLE ='NO' order by COLUMN_TYPE;
आप अधिक जाँच करना चाहते हैं तो थिक लिंक भी आपकी मदद करता है।
Mysql 5.1 (5.5 नहीं) में SHOW COLUMNS एक अस्थायी डिस्क तालिका का उपयोग करता है।
इसलिए इसे कुछ मामलों के लिए धीमा माना जा सकता है। कम से कम, यह आपके बनाए गए_tmp_disk_tables मान को टक्कर दे सकता है । प्रति कनेक्शन या प्रत्येक पृष्ठ अनुरोध के अनुसार एक अस्थायी डिस्क तालिका की कल्पना करें।
शो कॉम्स वास्तव में इतनी धीमी नहीं है, संभवतः क्योंकि यह फ़ाइल सिस्टम कैश का उपयोग करता है। फपीमेडमिन कहते हैं ~ 0.5ms लगातार। यह 500ms-1000ms की तुलना में एक WordPress पृष्ठ की सेवा करने के लिए कुछ भी नहीं है। लेकिन फिर भी, कई बार यह मायने रखता है। एक डिस्क सिस्टम की भागीदारी है, आप कभी नहीं जानते कि सर्वर व्यस्त होने पर क्या होता है, कैश भरा हुआ है, एचडीडी स्टाल्ड है आदि।
सेलेक्ट कॉलम के नामों को SELECT * FROM ... लिमिट 1 के माध्यम से ~ 0.1ms के आसपास रखा गया था, और यह क्वेरी कैश का भी उपयोग कर सकता है।
यदि संभव हो तो शो कॉलम का उपयोग किए बिना तालिका से स्तंभ नाम प्राप्त करने के लिए यहां मेरा थोड़ा अनुकूलित कोड है:
function db_columns_ar($table)
{
//returns Array('col1name'=>'col1name','col2name'=>'col2name',...)
if(!$table) return Array();
if(!is_string($table)) return Array();
global $db_columns_ar_cache;
if(!empty($db_columns_ar_cache[$table]))
return $db_columns_ar_cache[$table];
//IMPORTANT show columns creates a temp disk table
$cols=Array();
$row=db_row_ar($q1="SELECT * FROM `$table` LIMIT 1");
if($row)
{
foreach($row as $name=>$val)
$cols[$name]=$name;
}
else
{
$coldata=db_rows($q2="SHOW COLUMNS FROM `$table`");
if($coldata)
foreach($coldata as $row)
$cols[$row->Field]=$row->Field;
}
$db_columns_ar_cache[$table]=$cols;
//debugexit($q1,$q2,$row,$coldata,$cols);
return $cols;
}
टिप्पणियाँ:
व्यक्तिगत रूप से इसका उपयोग करने की कोशिश करें:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
यह प्रश्न पुराना है, लेकिन मैं यहां दिए गए क्वेरी को एक गतिशील तरीके से अपने फ़ील्ड नामों को खोजने का तरीका ढूंढ रहा था (जरूरी नहीं कि केवल एक तालिका के क्षेत्र)। और जब से लोग इसे अन्य संबंधित प्रश्नों में उस दिए गए कार्य के उत्तर के रूप में इंगित करते रहते हैं, मैं जिस तरह से यह पाया जा सकता है उसे साझा कर रहा हूं, गैविन सिम्पसन के सुझावों का उपयोग कर रहा हूं:
//Function to generate a HTML table from a SQL query
function myTable($obConn,$sql)
{
$rsResult = mysqli_query($obConn, $sql) or die(mysqli_error($obConn));
if(mysqli_num_rows($rsResult)>0)
{
//We start with header. >>>Here we retrieve the field names<<<
echo "<table width=\"100%\" border=\"0\" cellspacing=\"2\" cellpadding=\"0\"><tr align=\"center\" bgcolor=\"#CCCCCC\">";
$i = 0;
while ($i < mysqli_num_fields($rsResult)){
$field = mysqli_fetch_field_direct($rsResult, $i);
$fieldName=$field->name;
echo "<td><strong>$fieldName</strong></td>";
$i = $i + 1;
}
echo "</tr>";
//>>>Field names retrieved<<<
//We dump info
$bolWhite=true;
while ($row = mysqli_fetch_assoc($rsResult)) {
echo $bolWhite ? "<tr bgcolor=\"#CCCCCC\">" : "<tr bgcolor=\"#FFF\">";
$bolWhite=!$bolWhite;
foreach($row as $data) {
echo "<td>$data</td>";
}
echo "</tr>";
}
echo "</table>";
}
}
यह आसानी से एक सरणी में फ़ील्ड नाम सम्मिलित करने के लिए modded किया जा सकता है।
एक सरल का उपयोग करना: यदि आवश्यक हो (डेटा डंप भाग को हटाने) $sql="SELECT * FROM myTable LIMIT 1"
का उपयोग करने SHOW COLUMNS
या किसी भी अतिरिक्त php मॉड्यूल की आवश्यकता के बिना, आप किसी भी तालिका के क्षेत्र दे सकते हैं ।
उम्मीद है कि यह किसी और की मदद करता है।
यदि आप php का उपयोग करते हैं, तो इस gist का उपयोग करें ।
यह बिना किसी परिणाम , और सभी कस्टम फ़ील्ड जैसे पूर्ण फ़ील्ड का चयन कर सकते हैं:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
यदि sql के ऊपर कोई डेटा नहीं लौटता है, तो फ़ील्ड नाम aname, bname, b का अन्य फ़ील्ड नाम भी प्राप्त करेगा
सिर्फ दो लाइन:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
यह क्वेरी तालिका नाम निर्दिष्ट किए बिना डेटाबेस के सभी कॉलमों की एक सूची लाती है। यह केवल कॉलम नामों की सूची देता है:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
हालाँकि, जब मैंने इस क्वेरी को phpmyadmin में चलाया, तो इसने त्रुटियों की एक श्रृंखला प्रदर्शित की। बहरहाल, यह काम किया। इसलिए सावधानी के साथ इसका इस्तेमाल करें।
सभी उत्तरों में से सबसे सरल समाधान:
DESC `table name`
या
DESCRIBE `table name`
या
SHOW COLUMNS FROM `table name`
यदि आपको केवल फ़ील्ड नाम और प्रकार की आवश्यकता है (शायद एक्सेल में आसान कॉपी-पेस्टिंग के लिए):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
हटाना
DATA_TYPE='decimal'
यदि आप सभी डेटा प्रकार चाहते हैं
मैं कोई विशेषज्ञ नहीं, लेकिन यह मेरे लिए काम करता है ..
$sql = "desc MyTable";
$result = @mysql_query($sql);
while($row = @mysql_fetch_array($result)){
echo $row[0]."<br>"; // returns the first column of array. in this case Field
// the below code will return a full array-> Field,Type,Null,Key,Default,Extra
// for ($c=0;$c<sizeof($row);$c++){echo @$row[$c]."<br>";}
}
मैंने SQL सर्वर में इस क्वेरी की कोशिश की है और इसने मेरे लिए काम किया है:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')