Câu trả lời:
Cách tốt nhất là sử dụng cơ sở dữ liệu ảo siêu dữ liệu Information_SCHema . Cụ thể là bảng Information_SCHema.COLUMNS ...
SELECT `COLUMN_NAME`
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename'
AND `TABLE_NAME`='yourtablename';
Nó RẤT mạnh mẽ và có thể cung cấp cho bạn TẤN thông tin mà không cần phân tích văn bản (Chẳng hạn như loại cột, cho dù cột có thể rỗng, kích thước cột tối đa, bộ ký tự, v.v.) ...
Ồ, và đó là SQL tiêu chuẩn (Trong khi đó SHOW ...
là một phần mở rộng cụ thể của MySQL) ...
Để biết thêm thông tin về sự khác biệt giữa SHOW...
và sử dụng các INFORMATION_SCHEMA
bảng, hãy xem Tài liệuINFORMATION_SCHEMA
MySQL nói chung ...
SET @@SESSION.sql_mode = 'ANSI_QUOTES';
trước, nhưng tôi thực sự không thích điều đó. Và tôi không có vấn đề gì với các dấu kiểm lại để phân định định danh. Trên thực tế, tôi thích chúng hơn là trích dẫn kép (trích dẫn kép làm cho truy vấn cảm thấy sai đối với tôi) ... Với mỗi câu hỏi của riêng họ ...
Bạn có thể sử dụng truy vấn sau cho MYSQL:
SHOW columns FROM your-table;
Dưới đây là mã ví dụ cho thấy Cách thực hiện cú pháp trên trong php để liệt kê tên của các cột:
$sql = "SHOW COLUMNS FROM your-table";
$result = mysqli_query($conn,$sql);
while($row = mysqli_fetch_array($result)){
echo $row['Field']."<br>";
}
Để biết chi tiết về đầu ra của SHOW COLUMNS FROM TABLE
chuyến thăm: MySQL Chuyển động.
DESC TableName;
;-)
Có vẻ có 2 cách:
DESCRIBE `tablename`
hoặc là
SHOW COLUMNS FROM `tablename`
Thêm thông tin tại DESCRIBE
đây: http://dev.mysql.com/doc/refman/5.0/en/describe.html
DESCRIBE
chỉ là một phím tắt cho SHOW COLUMNS FROM
.
DESC
thậm chí còn ngắn tay hơn cho DESCRIBE
!
Chỉnh sửa : Hôm nay tôi đã học được cách tốt hơn để làm điều này. Xin vui lòng xem câu trả lời của ircmaxell.
Phân tích đầu ra của SHOW COLUMNS FROM table;
Dưới đây là thông tin thêm về nó: http://dev.mysql.com/doc/refman/5.0/en/show-columns.html
Sử dụng mysql_fetch_field()
để xem tất cả dữ liệu cột. Xem hướng dẫn .
$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;
}
"Cảnh báo Phần mở rộng này không được chấp nhận kể từ PHP 5.5.0 và sẽ bị xóa trong tương lai."
mysqli_num_fields()
và mysqli_fetch_field_direct()
là các phương pháp được cập nhật
Một hàm PHP cũ "mysql_list_fields ()" không được dùng nữa. Vì vậy, ngày nay, cách tốt nhất để có được tên của các trường là truy vấn "HIỂN THỊ MÀU SẮC TỪ tên_bảng [THÍCH 'tên']". Vì vậy, đây là một ví dụ nhỏ:
$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();
Không chắc chắn nếu đây là những gì bạn đang tìm kiếm, nhưng điều này làm việc cho tôi:
$query = query("DESC YourTable");
$col_names = array_column($query, 'Field');
Điều đó trả về một mảng đơn giản của tên cột / tên biến trong bảng hoặc mảng của bạn dưới dạng chuỗi, đó là những gì tôi cần để tự động xây dựng các truy vấn MySQL. Sự thất vọng của tôi là tôi đơn giản là không biết cách lập chỉ mục các mảng trong PHP rất tốt, vì vậy tôi không chắc phải làm gì với kết quả từ DESC hoặc SHOW. Hy vọng câu trả lời của tôi là hữu ích cho người mới bắt đầu như tôi!
Để kiểm tra kết quả: print_r($col_names);
khi bạn muốn kiểm tra tất cả cấu trúc bảng của mình với một số tệp thì sử dụng mã này. Trong truy vấn này, tôi chọn cột_name, cột_type và tên_bảng để biết thêm chi tiết. Tôi sử dụng thứ tự của cột_type để tôi có thể nhìn thấy nó dễ dàng.
SELECT `COLUMN_NAME`,COLUMN_TYPE,TABLE_NAME
FROM `INFORMATION_SCHEMA`.`COLUMNS`
WHERE `TABLE_SCHEMA`='yourdatabasename' order by DATA_TYPE;
Nếu bạn muốn kiểm tra chỉ nộp hai lần thì bạn có thể thực hiện dễ dàng
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;
nếu bạn muốn kiểm tra trường nào cho phép loại null, v.v. thì bạn có thể sử dụng trường này
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;
bạn muốn kiểm tra thêm thì thik link cũng giúp bạn.
SHOW COLUMNS trong mysql 5.1 (không phải 5.5) sử dụng bảng đĩa tạm thời.
Vì vậy, nó có thể được coi là chậm đối với một số trường hợp. Ít nhất, nó có thể tăng giá trị created_tmp_disk_tables của bạn . Hãy tưởng tượng một bảng đĩa tạm thời trên mỗi kết nối hoặc mỗi yêu cầu trang.
SHOW COLUMNS không thực sự quá chậm, có thể vì nó sử dụng bộ đệm hệ thống tệp. Phpmyadmin nói ~ 0,5ms liên tục. Điều này không là gì so với 500ms-1000ms phục vụ trang wordpress. Nhưng vẫn có những lúc nó quan trọng. Có sự tham gia của hệ thống đĩa, bạn không bao giờ biết điều gì xảy ra khi máy chủ bận, bộ nhớ cache đầy, hdd bị đình trệ, v.v.
Truy xuất tên cột thông qua CHỌN * TỪ ... GIỚI HẠN 1 là khoảng ~ 0,1ms và nó cũng có thể sử dụng bộ đệm truy vấn.
Vì vậy, đây là mã được tối ưu hóa nhỏ của tôi để lấy tên cột từ một bảng, mà không sử dụng các cột hiển thị nếu có thể:
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;
}
Ghi chú:
Hãy thử cái này tôi đích thân sử dụng nó:
SHOW COLUMNS FROM $table where field REGEXP 'stock_id|drug_name'
Câu hỏi này đã cũ, nhưng tôi đã đến đây để tìm cách tìm một truy vấn nhất định cho tên trường của nó theo cách động (không nhất thiết chỉ là các trường của bảng). Và vì mọi người tiếp tục chỉ ra đây là câu trả lời cho nhiệm vụ được đưa ra trong các câu hỏi liên quan khác, tôi chia sẻ cách tôi thấy nó có thể được thực hiện, bằng cách sử dụng các mẹo của Gavin Simpson:
//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>";
}
}
Điều này có thể dễ dàng được sửa đổi để chèn tên trường trong một mảng.
Sử dụng một cách đơn giản: $sql="SELECT * FROM myTable LIMIT 1"
có thể cung cấp cho bạn các trường của bất kỳ bảng nào mà không cần sử dụng SHOW COLUMNS
hoặc bất kỳ mô-đun php bổ sung nào nếu cần (loại bỏ phần kết xuất dữ liệu).
Hy vọng điều này sẽ giúp người khác.
nếu bạn sử dụng php, hãy sử dụng ý chính này .
nó có thể nhận các trường chọn đầy đủ thông tin mà không có kết quả và tất cả các trường tùy chỉnh, chẳng hạn như:
SELECT a.name aname, b.name bname, b.*
FROM table1 a LEFT JOIN table2 b
ON a.id = b.pid;
nếu trên sql trả về không có dữ liệu, cũng sẽ nhận được tên trường aname, bname, b's tên trường khác
chỉ hai dòng:
$query_info = mysqli_query($link, $data_source);
$fetch_fields_result = $query_info->fetch_fields();
Truy vấn này tìm nạp danh sách tất cả các cột trong cơ sở dữ liệu mà không phải chỉ định tên bảng. Nó trả về một danh sách chỉ các tên cột:
SELECT COLUMN_NAME
FROM INFORMATION_SCHEMA.COLUMNS
WHERE table_schema = 'db_name'
Tuy nhiên, khi tôi chạy truy vấn này bằng phpmyadmin, nó đã hiển thị một loạt lỗi. Tuy nhiên, nó đã làm việc. Vì vậy, sử dụng nó một cách thận trọng.
Giải pháp đơn giản nhất trong số tất cả các Câu trả lời:
DESC `table name`
hoặc là
DESCRIBE `table name`
hoặc là
SHOW COLUMNS FROM `table name`
nếu bạn chỉ cần tên và loại trường (có lẽ để dễ dàng sao chép vào Excel):
SELECT COLUMN_NAME, DATA_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE TABLE_SCHEMA='databasenamegoeshere'
AND DATA_TYPE='decimal' and TABLE_NAME = 'tablenamegoeshere'
tẩy
DATA_TYPE='decimal'
nếu bạn muốn tất cả các loại dữ liệu
Tôi không có chuyên gia, nhưng điều này làm việc cho tôi ..
$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>";}
}
Tôi đã thử truy vấn này trong SQL Server và điều này hiệu quả với tôi:
SELECT name FROM sys.columns WHERE OBJECT_ID = OBJECT_ID('table_name')