উত্তর:
INFORMATION_SCHEMA মেটাডেটা ভার্চুয়াল ডাটাবেস ব্যবহার করা সবচেয়ে ভাল উপায় । বিশেষত INFORMATION_SCHEMA.COLUMNS টেবিল ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
এটি অত্যন্ত শক্তিশালী, এবং আপনাকে পাঠ্যকে পার্স করার প্রয়োজন ছাড়াই প্রচুর পরিমাণে তথ্য দিতে পারে (যেমন কলামের ধরণ, কলামটি প্রবিহীন কিনা, সর্বোচ্চ কলামের আকার, অক্ষর সেট ইত্যাদি) ...
ওহ, এবং এটি স্ট্যান্ডার্ড এসকিউএল (যেখানে SHOW ...
মাইএসকিউএল নির্দিষ্ট এক্সটেনশন রয়েছে) ...
টেবিলগুলির মধ্যে পার্থক্য SHOW...
এবং ব্যবহারের বিষয়ে আরও তথ্যের জন্য INFORMATION_SCHEMA
, মাইএসকিউএল ডকুমেন্টেশনটি INFORMATION_SCHEMA
সাধারণভাবে দেখুন ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
আগেও হাত পেতে পারি, তবে আমি সত্যি তা পছন্দ করি না। সনাক্তকারী সীমানার জন্য আমার ব্যাক-টিক্স নিয়ে কোনও সমস্যা নেই। আসলে, আমি তাদের ডাবল
আপনি এমওয়াইএসকিউএল জন্য নিম্নলিখিত কোয়েরি ব্যবহার করতে পারেন:
SHOW columns FROM your-table;
নীচে উদাহরণ কোড রয়েছে যা দেখায় যে কলামগুলির নাম তালিকাভুক্ত করতে পিএইচপিতে উপরের সিনট্যাক্সটি কীভাবে প্রয়োগ করতে হবে:
$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
ভিজিট আউটপুট সম্পর্কে বিশদ জন্য: মাইএসকিউএল রেফারেন্স।
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
!
সম্পাদনা : আজ আমি এটি করার আরও ভাল উপায় শিখেছি। দয়া করে ইরকমেক্সেলের উত্তর দেখুন।
এর আউটপুট পার্স করুন 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;
}
"সতর্কতা এই এক্সটেনশনটি পিএইচপি 5.5.0 হিসাবে অবচয় করা হয়েছে এবং ভবিষ্যতে সরানো হবে।"
mysqli_num_fields()
এবং mysqli_fetch_field_direct()
আপডেট হওয়া পদ্ধতিগুলি
একটি পুরাতন পিএইচপি ফাংশন "mysql_list_fields ()" হ্রাস করা হয়েছে dep সুতরাং, আজ ক্ষেত্রের নাম পাওয়ার সর্বোত্তম উপায় হল একটি কোয়েরি "সারণী_নাম থেকে [দেখান 'নাম' পছন্দ করুন]" query সুতরাং, এখানে একটি সামান্য উদাহরণ:
$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');
এটি আপনার টেবিলের কলামের নাম / পরিবর্তনশীল নামগুলির একটি সহজ অ্যারে বা স্ট্রিং হিসাবে অ্যারে প্রদান করে, যা মাইএসকিউএল কোয়েরিগুলি গতিশীলরূপে গড়ে তুলতে আমার প্রয়োজন ছিল। আমার হতাশার বিষয়টি হ'ল আমি পিএইচপি তে অ্যারেগুলি কীভাবে খুব ভালভাবে সূচনা করতে পারি তা সহজভাবে জানি না, তাই DESC বা শো থেকে ফলাফলগুলি নিয়ে কী করা যায় তা আমি নিশ্চিত ছিলাম না। আশা করি আমার উত্তরটি আমার মতো নতুনদের পক্ষে সহায়ক!
ফলাফল যাচাই করতে: print_r($col_names);
আপনি যখন কিছু দায়ের করে আপনার সমস্ত টেবিল কাঠামো পরীক্ষা করতে চান তখন এই কোডটি ব্যবহার করুন। এই ক্যোয়ারিতে আমি আরও তথ্যের জন্য কলাম_নাম, কলাম_প্রকার এবং টেবিল_নামটি নির্বাচন করি। আমি কলাম_প্রকার অনুসারে অর্ডার ব্যবহার করি যাতে আমি এটি সহজে দেখতে পারি।
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;
আপনি আরও চেক করতে চান তবে থিক লিঙ্কটি আপনাকে সহায়তা করবে।
মাইএসকিএল 5.1 (5.5 নয়) এর কলম্বগুলি দেখান একটি অস্থায়ী ডিস্ক টেবিল ব্যবহার করে।
সুতরাং এটি কিছু ক্ষেত্রে ধীর বিবেচনা করা যেতে পারে। কমপক্ষে, এটি আপনার তৈরি_টিএমপি_ডিস্ক _ টেবিলের মানটিকে দ্বিগুণ করতে পারে। প্রতি সংযোগে বা প্রতিটি পৃষ্ঠার অনুরোধের জন্য একটি অস্থায়ী ডিস্ক সারণী কল্পনা করুন।
দেখান COLUMNS আসলে এত ধীর নয়, সম্ভবত এটি ফাইল সিস্টেম ক্যাশে ব্যবহার করে। Phpmyadmin ধারাবাহিকভাবে 0.5 ডলার বলে। এটি ওয়ার্ডপ্রেস পৃষ্ঠা পরিবেশনার 500ms-1000ms এর সাথে তুলনা করে কিছুই নয়। কিন্তু তবুও, এটি গুরুত্বপূর্ণ সময় আছে। একটি ডিস্ক সিস্টেমের জড়িততা রয়েছে, আপনি কখনই জানেন না যে সার্ভার ব্যস্ত থাকাকালীন কী হয়, ক্যাশে পূর্ণ হয়, এইচডিডি বন্ধ থাকে ইত্যাদি etc.
নির্বাচন থেকে * কলামের মাধ্যমে নামগুলি পুনরুদ্ধার করা হচ্ছে ... LIMIT 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>";
}
}
কোনও অ্যারেতে ক্ষেত্রের নামগুলি সন্নিবেশ করানোর জন্য এটি সহজেই সংশোধন করা যায়।
একটি সাধারণ ব্যবহার: $sql="SELECT * FROM myTable LIMIT 1"
আপনাকে কোনও টেবিলের ক্ষেত্রগুলি দিতে পারে, প্রয়োজন না SHOW COLUMNS
পড়লে বা কোনও অতিরিক্ত পিএইচপি মডিউল ছাড়াই , প্রয়োজন হয় (ডেটা ডাম্প অংশটি অপসারণ)।
আশা করি এটি অন্য কাউকে সহায়তা করবে।
যদি আপনি পিএইচপি ব্যবহার করেন তবে এই টুকরোটিটি ব্যবহার করুন ।
এটি কোনও ফলাফল ছাড়াই নির্বাচিত ক্ষেত্রগুলির পুরো তথ্য এবং সমস্ত কাস্টম ক্ষেত্র যেমন:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
উপরে যদি বর্গ বর্গ কোনও তথ্য না দেয় তবে ক্ষেত্রের নামগুলিও নাম , নাম , বি এর অন্যান্য ক্ষেত্রের নামটি পাবেন get
মাত্র দুটি লাইন:
$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>";}
}
আমি এসকিউএল সার্ভারে এই ক্যোয়ারীটি চেষ্টা করেছি এবং এটি আমার জন্য কাজ করেছে:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')