سورت كردن به ترتيب الفباي فارسي

NabiKAZ

Well-Known Member
سلام
یه تابع اینجا اومده :
http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=20
در مورد سورت کردن به ترتیب حروف الفبای فارسی . خیلی هم خوب کار میکنه .
اما در صورتی که بخواهیم اطلاعاتی که تو دیتابیس هستند رو به ترتیب حروف الفبای فارسی بخونه و همزمان نمایش بده . یعنی لازم نباشه همه داده ها رو بخونیم و بعد این تابع (که لینکشو بالا دادم) رو روش اعمال کنیم .
در واقع باید راهی پیدا بشه که سورت کردن توسط PHP صورت نگیره بلکه توسط MySQL صورت بگیره ...

در این مورد ممنون میشم راهنمایی کنید
نبي
 

miladmovie

Active Member
mysql 4 و خرده ای به بعد sort زبان فارسی هم رو پشتیبانی می کنه
 

arashdanger

Member
من هم میدونم که mysql 4. ... سورت فارسی رو ساپورت میکنه ولی میشه بگین چطور میشه ازش استفاده کرد؟
 

NabiKAZ

Well-Known Member

golden

Member
البته نه به همین راحتی چون دستور order روی فارسی چندان درست کار نمیکنه و اصلا mysql ( تا اونجا که من میدونم )درست و حسابی مرتب سازی فارسی را ساپرت نمیکنه. مثلا با حرفی مثل ژ مشکل داره، یعنی در واقع عربی را ساپورت میکنه.
 

miladmovie

Active Member
golden گفت:
البته نه به همین راحتی چون دستور order روی فارسی چندان درست کار نمیکنه و اصلا mysql ( تا اونجا که من میدونم )درست و حسابی مرتب سازی فارسی را ساپرت نمیکنه. مثلا با حرفی مثل ژ مشکل داره، یعنی در واقع عربی را ساپورت میکنه.
من هم بر اساس این خبر گفتم :
http://www.iranphp.net/modules/news/article.php?storyid=170
ولی با mysql ورژن 5 تست کردم کار نکرد !
 

NabiKAZ

Well-Known Member
درسته تو اون مقاله یه اشاره ای شده ...
اما دستور order که کار نمیکنه ...

البته من فعلا مشکلم رو یه جوری حل کردم . مجبور شدم تمامی داده های مورد نیازم رو از دیتا بیس بخونم و بوسیله اون سورسی که لینکشو در بالا اوردم همه رو به ترتیب حرفو الفبا بکنم و در آرایه جدید ذخیره کنم و بعد اونها رو چاپ کنم .
فعلا چاره ای نیست.

ممنون از دوستان
نبی
 

miladmovie

Active Member
فکر کنم وقتی دیتابیس درست می کنی باید ست کنی که encoding جدول utf-8 باشه

حالا چک می کنم ببینم چی می شه !
 
NabiKAZ گفت:
درسته تو اون مقاله یه اشاره ای شده ...
اما دستور order که کار نمیکنه ...

البته من فعلا مشکلم رو یه جوری حل کردم . مجبور شدم تمامی داده های مورد نیازم رو از دیتا بیس بخونم و بوسیله اون سورسی که لینکشو در بالا اوردم همه رو به ترتیب حرفو الفبا بکنم و در آرایه جدید ذخیره کنم و بعد اونها رو چاپ کنم .
فعلا چاره ای نیست.

ممنون از دوستان
نبی


دوست خوب ميشه بيشتر توضيح بديد چون اين مشكل من هم است. اما من نتونستم ارتباطي بين فيلدي كه سورت ميكنه و مابقي اطلاعات ركورد ايجاد كنم.
 

NabiKAZ

Well-Known Member
videoparda گفت:
دوست خوب ميشه بيشتر توضيح بديد چون اين مشكل من هم است. اما من نتونستم ارتباطي بين فيلدي كه سورت ميكنه و مابقي اطلاعات ركورد ايجاد كنم.

سلام
البته روشي كه من استفاده كردم كمي سرعت رو ميگيره ! ولي چاره اي نداشتم .
ابتدا داده هاي هر فيلد رو تو ارايه هاي مجزا ذخيره كردم بعد ارايه مورد نظر كه در اينجا firstname هست رو بوسيله تابع هايي كه در اين مقاله :
http://www.iranphp.net/modules/sections/index.php?op=viewarticle&artid=20
اومده سورت كردم ُ نهايتا هم چون انديس ارايه هاي نظر هر فيلد تغيير نكرده با يه حلقه فور ارايه هاي نظير هر فيلد رو چاپ كردم .

PHP:
function fa_decode($str){
$_to_farsi=array(
chr(131).chr(48) => chr(216).chr(162),
chr(131).chr(49) => chr(216).chr(167),
chr(131).chr(50) => chr(216).chr(168),
chr(131).chr(51) => chr(217).chr(190),
chr(131).chr(52) => chr(216).chr(170),
chr(131).chr(53) => chr(216).chr(171),
chr(131).chr(54) => chr(216).chr(172),
chr(131).chr(55) => chr(218).chr(134),
chr(131).chr(56) => chr(216).chr(173),
chr(131).chr(57) => chr(216).chr(174),
chr(131).chr(65) => chr(216).chr(175),
chr(131).chr(66) => chr(216).chr(176),
chr(131).chr(67) => chr(216).chr(177),
chr(131).chr(68) => chr(216).chr(178),
chr(131).chr(69) => chr(218).chr(152),
chr(131).chr(70) => chr(216).chr(179),
chr(131).chr(71) => chr(216).chr(180),
chr(131).chr(72) => chr(216).chr(181),
chr(131).chr(73) => chr(216).chr(182),
chr(131).chr(74) => chr(216).chr(183),
chr(131).chr(75) => chr(216).chr(184),
chr(131).chr(76) => chr(216).chr(185),
chr(131).chr(77) => chr(216).chr(186),
chr(131).chr(78) => chr(217).chr(129),
chr(131).chr(79) => chr(217).chr(130),
chr(131).chr(80) => chr(218).chr(169),
chr(131).chr(81) => chr(218).chr(175),
chr(131).chr(82) => chr(217).chr(132),
chr(131).chr(83) => chr(217).chr(133),
chr(131).chr(84) => chr(217).chr(134),
chr(131).chr(85) => chr(217).chr(136),
chr(131).chr(86) => chr(217).chr(135),
chr(131).chr(87) => chr(219).chr(140));
return strtr($str,$_to_farsi);
}


function fa_encode($str){
$_to_safe=array(
chr(216).chr(162) => chr(131).chr(48),
chr(216).chr(167) => chr(131).chr(49),
chr(216).chr(168) => chr(131).chr(50),
chr(217).chr(190) => chr(131).chr(51),
chr(216).chr(170) => chr(131).chr(52),
chr(216).chr(171) => chr(131).chr(53),
chr(216).chr(172) => chr(131).chr(54),
chr(218).chr(134) => chr(131).chr(55),
chr(216).chr(173) => chr(131).chr(56),
chr(216).chr(174) => chr(131).chr(57),
chr(216).chr(175) => chr(131).chr(65),
chr(216).chr(176) => chr(131).chr(66),
chr(216).chr(177) => chr(131).chr(67),
chr(216).chr(178) => chr(131).chr(68),
chr(218).chr(152) => chr(131).chr(69),
chr(216).chr(179) => chr(131).chr(70),
chr(216).chr(180) => chr(131).chr(71),
chr(216).chr(181) => chr(131).chr(72),
chr(216).chr(182) => chr(131).chr(73),
chr(216).chr(183) => chr(131).chr(74),
chr(216).chr(184) => chr(131).chr(75),
chr(216).chr(185) => chr(131).chr(76),
chr(216).chr(186) => chr(131).chr(77),
chr(217).chr(129) => chr(131).chr(78),
chr(217).chr(130) => chr(131).chr(79),
chr(218).chr(169) => chr(131).chr(80),
chr(218).chr(175) => chr(131).chr(81),
chr(217).chr(132) => chr(131).chr(82),
chr(217).chr(133) => chr(131).chr(83),
chr(217).chr(134) => chr(131).chr(84),
chr(217).chr(136) => chr(131).chr(85),
chr(217).chr(135) => chr(131).chr(86),
chr(219).chr(140) => chr(131).chr(87));
return strtr($str,$_to_safe);
}

include ("connect_db.php");
$TableName= "teachers";
$Query = "SELECT * FROM $TableName";
$Result = mysql_db_query ($DBName, $Query, $Link);
$m=0;	
while ($Row = mysql_fetch_array ($Result)) {
$id_m[$m]= $Row['id'];
$lastname_m[$m]= $Row['lastname'];
$firstname_m[$m]= fa_encode($Row['firstname']);
$m++;
}
$m--;
$m_org=$m;
	 reset($firstname_m);		
	 asort($firstname_m);
	 reset($firstname_m);
for ($i=0; $i<=$m_org; $i++) {
$Line = each ($firstname_m);
$x=$Line[key];
$id_m2[$i]= $id_m[$x];
$lastname_m2[$i]= $lastname_m[$x];
$firstname_m2[$i]= fa_decode($firstname_m[$x]);
}
for ($i=0; $i<=$m_org; $i++) {
print $id_m2[$i];
print $lastname_m2[$i];
print $firstname_m2[$i];
}

ببخشيد كدم خيلي بهم ريختست ... سبك كد نويسي من همينجوريه :D
موفق باشيد
نبي
 
آخرین ویرایش:

ijamaatlou

New Member
با سلام
Collation ستونی که می خواهید بر اساس اون sort انجام بدید بر روی utf8_persian_ci قرار بدید (توی دیتابیس) در اینحالت "گ ، پ ، ژ ، چ " رو هم شناسایی می کنه
 

جدیدترین ارسال ها

بالا