السلام عليكم ..
قبل عدة أيام طرح أحد الإخوة تساؤل حول كيفية عرض مجموعة من الأسماء التي تبدأ بحرف معين مثلاً A أو بالعربية أ ..
فأجاب عليه البعض عن طريق وضع الأحرف في مصفوفة أو جعلها بالشكل التالي مثلاً :
كود PHP:
<a href="browse.php?L=A">( A )</a>
<a href="browse.php?L=B">( B )</a>
<a href="browse.php?L=C">( C )</a>
<a href="browse.php?L=D">( D )</a>
.....
و هكذا ..
و في ملف browse.php يوضع كود شبيه بالتالي :
كود PHP:
$query=mysql_query("SELECT * FROM table WHERE feild LIKE '$L%' ORDER BY name");
while($result=mysql_fetch_array($query)){
echo"<a href=\"browse.php?id=$result[id]\">$result[name]</a><br>";
}
ومهمة الكود السابق الإستعلام عن الأسماء المبدوءة بالحرف المختار الموضوع كقيمة للمتغير L ثم عرضها بشكل مرتب حسب الحروف الأبجدية الإنجليزية A to Z ..
و كمثال يمكن إستعمال هذا المثال ..
قاعدة البيانات :
كود PHP:
#
# Table structure for table 'feild'
#
CREATE TABLE `feild` (
`id` int(10) unsigned NOT NULL auto_increment,
`name` varchar(255) NOT NULL default '',
PRIMARY KEY (`id`),
KEY `id` (`id`)
) TYPE=MyISAM;
#
# Dumping data for table 'feild'
#
INSERT INTO feild VALUES (1,'Ahmed Adel');
INSERT INTO feild VALUES (2,'Badr Salman');
INSERT INTO feild VALUES (3,'Khaled Alghamdi');
INSERT INTO feild VALUES (4,'Abdullah Sami');
INSERT INTO feild VALUES (5,'Salem Ali');
و ملف السكربت و ليكن إسمه مثلاً browse.php :
كود PHP:
<?php
$dbserver="localhost";
$dbuser="";
$dbpass="";
$dbname="table";
mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname);
echo"<a href=\"browse.php?L=A\">A</a>
<a href=\"browse.php?L=B\">B</a>
<a href=\"browse.php?L=C\">C</a>
<a href=\"browse.php?L=D\">D</a>
.........
<a href=\"browse.php?L=S\">S</a> /
<a href=\"browse.php\">All</a><br><br>";
if((!isset($L))){
$query=mysql_query("SELECT * FROM feild ORDER BY name");
while($result=mysql_fetch_array($query)){
echo"<a href=\"browse.php?id=$result[id]\">$result[name]</a><br>";
}
}
if(isset($L)){
$query=mysql_query("SELECT * FROM feild WHERE name LIKE '$L%' ORDER BY name");
while($result=mysql_fetch_array($query)){
echo"<a href=\"browse.php?id=$result[id]\">$result[name]</a><br>";
}
}
?>
لكن هناك مشكلة ستكون في حالة الأسماء عربية .. و قد واجهتني و سألت فيها عدد من الإخوة و لكن لم يعطني أحدهم حلاً عملياً سريعاً .. إلى أن وفقني الله لهذا الحل الذي إستنتجه من إفادة أفادني بها سابقاً الأستاذ عبد الرحمن ..
المشكلة كانت أن السكربت لا يفرق بين ( ب ) و ( ت ) و ( ث ) .. لأنها بنفس الرسم .. لذا الإسم المبدوء بحرف الباء سيظهر في كلا الأحرف و كذلك الإسم المبدوء بحرف الجيم مثلاً سيظهر بحرف الحاء ..
فكان الحل الإستعلام لكن مع شرط BINARY ..
و بالمثال يتضح المقال :
كود PHP:
<?php
$dbserver="localhost";
$dbuser="";
$dbpass="";
$dbname="table";
mysql_connect($dbserver,$dbuser,$dbpass);
mysql_select_db($dbname);
echo"<a href=\"browse.php?L=أ\">أ</a>
<a href=\"browse.php?L=ب\">ب</a>
<a href=\"browse.php?L=ت\">ت</a>
<a href=\"browse.php?L=ث\">ث</a>
.........
<a href=\"browse.php?L=و\">و</a> /
<a href=\"browse.php\">الكل</a><br><br>";
if((!isset($L))){
$query=mysql_query("SELECT * FROM feild ORDER BY BINARY name");
while($result=mysql_fetch_array($query)){
echo"<a href=\"browse.php?id=$result[id]\">$result[name]</a><br>";
}
}
if(isset($L)){
$query=mysql_query("SELECT * FROM feild WHERE BINARY name LIKE '$L%' ORDER BY BINARY name");
while($result=mysql_fetch_array($query)){
echo"<a href=\"browse.php?id=$result[id]\">$result[name]</a><br>";
}
}
?>
على إفتراض أنك أنشأت مثل القاعدة السابقة لكن وضعت قيم عربية ..
التغيير كان بالروابط و كذلك بالسطر :
كود PHP:
$query=mysql_query("SELECT * FROM feild ORDER BY BINARY name");
حيث طلب من أمر الإستعلام عرض الأسماء بترتيب رقمي و هو الملائم للأسماء باللغة العربية .. حيث يرتبها من أ إلى ي ..
و كذلك كان بالسطر :
كود PHP:
$query=mysql_query("SELECT * FROM feild WHERE BINARY name LIKE '$L%' ORDER BY BINARY name");
وقد وضعنا BINARY مرتين ..
المرة الأولى ليتم إختيار الإسم المبدوء بالحرف المختار بشكل رقمي ليناسب اللغة العربية و لو لم نضعها فسيكون حين تطلب الأسماء التي تبدأ بحرف الباء و لنقل مثلا ( بدر سالم ) فإن هذا الإسم سيظهر في الأسماء بحرف الباء + الأسماء بحرف السين !! ..
و بالنسبة للمرة الثانية التي وضعنا فيها BINARY لترتيب الأسماء أبجدياً ..
شكراً للأستاذ عبدالرحمن و آسف لو كانت الفكرة طرحت سابقاً لكن مو مهم التكرار يعلم الشطار
..