گرفتن مقدار فیلدهای Enum و Set در MySQL
23 تير 1389 ساعت 11:58
پی اچ پی
بیرون کشیدن لیست Enum و Set از دیتابیس
یکی از روشهای ذخیره اطلاعات در MySQL استفاده از لیست از قبل تعیین شده است که کنترل کنیم فقط کلمات خاصی قابل ذخیره و بازیابی باشند. مثلا جدول زیر:
CREATE TABLE boplo_categories (
`id` INT(10) AUTO_INCREMENT PRIMARY_KEY,
`categories` ENUM('PHP', 'Web Design', 'MODx', 'IT', 'Scratch'),
`tags` SET('Solution', 'API', 'AJAX', 'CSS', 'Javascript')
)
در این جدول، ستون categories که از نوع ENUM تعیین شده، حتما با یکی از مقادیر مشخص شده می تونه پر بشه.
و ستون tags که از نوع SET ایجاد شده مانند ENUM عمل می کنه با این تفاوت که در این ستون میشه بیشتر از یکی از موارد لیست رو ثبت کرد مثلا هم CSS و هم Solution ولی ENUM فقط یک مقدار میتونه داشته باشه.
کار با ENUM و SET خیلی لذتبخشه غیر از موقعی که بخوایم لیستی که در ENUM یا SET مشخص شده رو در برنامه امون داشته باشیم. معمولترین کاردبردش ساختن <SELECT> براساس مقادیر مشخص شده است. برای اینکار باید ابتدا لیست مقادیری که بصورت ENUM یا SET مشخص شده رو توسط یک کوئری بدست بیاریم و سپس کلمات لیست رو از این مقدار خارج کنیم. مثلا میخوایم لیست کلمات مشخص شده برای ستون categories که بالا قرار دادم رو بدست بیاریم:
$sql = " SELECT COLUMN_TYPE FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_NAME = 'boplo_categories' AND COLUMN_NAME = 'categories' "; $row = mysql_fetch_row( mysql_query($sql) ); $list = $row[0];
تا اینجا متغیر list$ حاوی مقدار زیر خواهد بود:
enum('PHP','Web Design','MODx','IT','Scratch')
اصل کار کوئری بود. حالا برای Enum، توسط تابع substr شش تا کاراکتر اول این مقدار و دو کاراکتر آخرش رو حذف می کنیم:
$list = substr($list, 6, -2);که list$ به این تبدیل میشه:
PHP','Web Design','MODx','IT','Scratchدر آخر توسط تابع explode لیست رو به آرایه تبدیل می کنیم:
$array = explode("','", $list);
کد زیر نمونه کامل این مراحل هست که چک می کنه، لیست SET رو هم بازیابی می کنه:
$tableName = 'boplo_categories';
$columnName = 'categories';
$sql = "
SELECT COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = '$tableName'
AND COLUMN_NAME = '$columnName'
";
$row = mysql_fetch_row( mysql_query($sql) );
$list = $row[0];
if(substr($list,0,3) == 'set')
$list = substr($list, 5, -2); // Remove Prefix and Suffix
if(substr($list,0,4) == 'enum')
$list = substr($list, 6, -2); // Remove Prefix and Suffix
$array = explode("','", $list); // Split to array
print_r($array);
و کد زیر، نمونه جمع و جور این مراحل به شکل یک تابع کم حجمه:
/**
* Get ENUM and SET dataset lists
* @author AHHP
*
* @param string $table Table name.
* @param string $column Column name which is ENUM or SET.
* @return array Set of data as an array.
*/
function mysql_get_dataset($table, $column) {
list($list) = mysql_fetch_row(
mysql_query("
SELECT COLUMN_TYPE
FROM INFORMATION_SCHEMA.COLUMNS
WHERE
TABLE_NAME = '$table'
AND COLUMN_NAME = '$column'
")
);
if(substr($list,0,3) == 'set') $start = 5;
if(substr($list,0,4) == 'enum') $start = 6;
return explode("','",substr($list, $start, -2));
}
$array = mysql_get_dataset('boplo_categories', 'categories');
print_r($array);
خروجی هر دو نمونه بالا، مقدار زیر خواهد بود:
Array
(
[0] => PHP
[1] => Web Design
[2] => MODx
[3] => IT
[4] => Scratch
)
مؤید باشید

Google Chrome
امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. دانشجوی رشته صنایع هستم شغل درست و حسابی ندارم. طراحی وب می کنم ولی همه اش واسه سرگرمی بوده. برنامه نویس PHP هستم. برنامه نویسی و وقت گذرونی با کامپیوتر تنها کاریه که خسته ام نمی کنه.
تو چی فکر می کنی؟