Boplo.ir
rss


جستجو

آخرین مطالب

 

 

مطالب همینجوری

 

 

بر و بچ

MyView Tween


دوستشون دارم


بیلبورد

دامین برای فروش: CleanCode.ir
FastFeed.ir
Fonvi.com

تماس


انواع و اقسام سفارشات طراحی و برنامه نویسی سایت پذیرفته میشه. از سایت حمایت از خرگوشهای صورتی گرفته تا سایت قاچاق اعضای بدن!
تماس

 

از بيماران سرطاني حمايت كنيم

A new begining
AHHP presents

 

گرفتن مقدار فیلدهای 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
)

مؤید باشید

 

تو چی فکر می کنی؟


Hesam : اون بالا تو آموزش گفتید 6 تا از اول 2 تا از آخر بعد تو کدی که نشون دادین نوشتید :
$list = substr($list, 5);
$list = substr($list, 0, -2);
d
.
.
.
.
و حالا اگر اون کد بالا رو به این شکل در بیاریم غلط میشه ؟ :
$list = substr($list, 6, -2);
d
(1 ماه و 22 روز و 20 ساعت و 5 دقیقه پیش)

امیرحسین : ممنون از نکته ای که اشاره کردید.
من کدها رو براساس این نکته تغییر دادم.
(1 ماه و 22 روز و 18 ساعت و 6 دقیقه پیش)

مهدی : سلام!
نکته خیلی جالبی بود! خیلی لازمش داشتم! ممنونم ازت!
(26 روز و 2 ساعت و 52 دقیقه پیش)
نام:
ایمیل: (منتشر نخواهد شد!)
وب سایت:

کد امنیتی: اگر در خواندن این کد مشکلی دارید، اینجا کلیک کنید تا صفحه بازخوانی شود.

 

me امیرحسینم. اسمم رو دوست دارم، خودم رو دوست دارم. تهران زندگی می کنم. دانشجوی رشته صنایع هستم شغل درست و حسابی ندارم. طراحی وب می کنم ولی همه اش واسه سرگرمی بوده. برنامه نویس PHP هستم. برنامه نویسی و وقت گذرونی با کامپیوتر تنها کاریه که خسته ام نمی کنه.
آدم خیلی سردی هستم، اینو دور و وری هام میگن. ولی به نظر خودم سرد نیستم در واقع گرمای خودم رو کم بروز می دم! آدما رو اغلب دوست دارم غیر از اون مواقعی که اونا من رو نادیده میگیرن!

این سایت رو بعد از کلی اینور اونور دوباره راه انداختم تا هرچی دوست دارم توش بنویسم، چه کسی بخونه چه نخونه.
خلاصه اینجا خونه منه،

به خونه امیرحسین خوش اومدی...

MODx | Template World