السلام عليكم ..
قبل عدة أيام طرح أحد الإخوة تساؤل حول كيفية عرض مجموعة من الأسماء التي تبدأ بحرف معين مثلاً 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 يوضع كود شبيه بالتالي :
ومهمة الكود السابق الإستعلام عن الأسماء المبدوءة بالحرف المختار الموضوع كقيمة للمتغير L ثم عرضها بشكل مرتب حسب الحروف الأبجدية الإنجليزية A to Z ..كود 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>";
}
و كمثال يمكن إستعمال هذا المثال ..
قاعدة البيانات :
و ملف السكربت و ليكن إسمه مثلاً browse.php :كود 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');
لكن هناك مشكلة ستكون في حالة الأسماء عربية .. و قد واجهتني و سألت فيها عدد من الإخوة و لكن لم يعطني أحدهم حلاً عملياً سريعاً .. إلى أن وفقني الله لهذا الحل الذي إستنتجه من إفادة أفادني بها سابقاً الأستاذ عبد الرحمن ..كود 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");
و كذلك كان بالسطر :
وقد وضعنا BINARY مرتين ..كود PHP:$query=mysql_query("SELECT * FROM feild WHERE BINARY name LIKE '$L%' ORDER BY BINARY name");
المرة الأولى ليتم إختيار الإسم المبدوء بالحرف المختار بشكل رقمي ليناسب اللغة العربية و لو لم نضعها فسيكون حين تطلب الأسماء التي تبدأ بحرف الباء و لنقل مثلا ( بدر سالم ) فإن هذا الإسم سيظهر في الأسماء بحرف الباء + الأسماء بحرف السين !! ..
و بالنسبة للمرة الثانية التي وضعنا فيها BINARY لترتيب الأسماء أبجدياً ..
شكراً للأستاذ عبدالرحمن و آسف لو كانت الفكرة طرحت سابقاً لكن مو مهم التكرار يعلم الشطار![]()
..



