:: شبكة الغد ::
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.



 
الرئيسيةالبوابةأحدث الصورالتسجيلدخول

 

 استعلامات MySQL بشكل متقدم

اذهب الى الأسفل 
4 مشترك
كاتب الموضوعرسالة
islam
مشرفة منتدى عالم حواء
islam


عدد المساهمات : 197
نقاط : 106582
تاريخ التسجيل : 03/11/2009
الجنس : انثى
رسالة sms لا إله إلا الله محمد رسول الله

استعلامات MySQL بشكل متقدم Empty
مُساهمةموضوع: استعلامات MySQL بشكل متقدم   استعلامات MySQL بشكل متقدم Emptyالخميس يونيو 10, 2010 7:49 am

بسم الله الرحمن الرحيم

استخدام قيمة الحقل عند تحديثه !

هل تعلم انه يمكنك استخدام قيمة الحقل عند تحديثه ، ستقول كيف ؟ .. حسنا المعروف دائما هو


UPDATE TABLE SET FIELD = "قيمة جديدة";



لكن ماذا لو اردت استخدام قيمة الحقل واضافة عليها شئ جديد مثلا .. لدي جدول يحتوي على اسماء دكاترة واريد اضافة ال prefix التالي : "د."

بكل بساطة :



UPDATE TABLE SET FIELD = CONCAT("د." , FIELD) ;



اظن الفكرة اتضحت الان فالعملية SET تشبه عملية الاسناد في البرمجة (=) حيث يمكنك استعمال صيغة مباشرة "قيمة جديدة" او صيغة معقدة وحتى عملية رياضيه اذا كان المحتوى عبارة عن ارقام .. فمثلا لو اردنا استعمال حقل كعداد لزيارات موضوع معين عندها يمكننا زيادة العداد بدون ان ناخذ القيمة القديمة


UPDATE TABLE SET FIELD = FIELD + 1 ;



* اضافة :
ايضا يمكننا استخدام دالة Replace لاستبدال جزء معين من الحقل بجزء جديد
مثال لدالة Replace


SELECT REPLACE("[ندعوك للتسجيل في المنتدى أو التعريف بنفسك لمعاينة هذا الرابط] , "Flasher" , "Abdulaziz")



مثال لاستبدال حقل


UPDATE TABLE SET FIELD = REPLACE(FIELD , "Search" , "Replace")



Joins
يمكن باكثر من طريقة دمج عدة جداول مع بعضها البعض او حتى دمج جدول مع نفسه ! ( غريب اليس كذلك)

أولا تحتاج الى هذه الجداول مكونه لديك (لغرض الامثلة فقط) :


CREATE TABLE `employee` (`name` VARCHAR (50),
`id` INT (4) AUTO_INCREMENT,
`salary` INT (4) DEFAULT '0',
PRIMARY KEY(`id`));
CREATE TABLE `items` (`id` INT (4) AUTO_INCREMENT,
`employee_id` INT (4),
`data` TINYTEXT, PRIMARY KEY(`id`));

INSERT INTO `employee` (`name`,`id`,`salary`) VALUES ('Ahmed',NULL,0);
INSERT INTO `employee` (`name`,`id`,`salary`) VALUES ('Abdulaziz',NULL,0);
INSERT INTO `employee` (`name`,`id`,`salary`) VALUES ('Mohammed',NULL,0);

INSERT INTO `items` (`id`,`employee_id`,`data`) VALUES (NULL,1,'Labtop ')
INSERT INTO `items` (`id`,`employee_id`,`data`) VALUES (NULL,1,'Car ')
INSERT INTO `items` (`id`,`employee_id`,`data`) VALUES (NULL,2,'Desk ')



Inner-Join

هو دمج جدول مع جدول اخر عندما يتم توفر كل الجانبين بمعنى لا بد ان يربط الجدول الاول بالجدول الثاني والجدول الثاني يربط بالاول (باختصار يتم استبعاد اي سجل لا يوجد له رابط على الجدول الاخر)
مثال


mysql> Select * from employee,items where employee.id = items.employee_id
-> ;
+-----------+----+--------+----+-------------+---------+
| name | id | salary | id | employee_id | data |
+-----------+----+--------+----+-------------+---------+
| Ahmed | 1 | 0 | 1 | 1 | Labtop |
| Ahmed | 1 | 0 | 2 | 1 | Car |
| Abdulaziz | 2 | 0 | 3 | 2 | Desk |
+-----------+----+--------+----+-------------+---------+
3 rows in set (0.00 sec)




تلاحظ انه تم ظهور Ahmed مرتين لوجود سجلين له في جدول items
وظهور Abdulaziz مرة واحده لوجود سجل واحد فقط في جدول items
لكن 'Mohammed' لم يظهر له شئ لان لايوجد item يربط به

* ملاحظة يمكن كتابة الكود اعلاه بشكل اخر :


SELECT employee.*,items.* FROM employee JOIN items ON employee.id = items.employee_id




Left-Join

مايميزها عن Inner Join أنها لاتشترط حضور سجل من الطرف الاخر


mysql> SELECT employee.*,items.* FROM employee LEFT JOIN items ON employee.id =
items.employee_id ;
+-----------+----+--------+------+-------------+---------+
| name | id | salary | id | employee_id | DATA |
+-----------+----+--------+------+-------------+---------+
| Ahmed | 1 | 0 | 1 | 1 | Labtop |
| Ahmed | 1 | 0 | 2 | 1 | Car |
| Abdulaziz | 2 | 0 | 3 | 2 | Desk |
| Mohammed | 3 | 0 | NULL | NULL | NULL |
+-----------+----+--------+------+-------------+---------+
4 rows IN SET (0.00 sec)




تلاحظ انه ظهر السجل الخاص ب Mohammed وحقول جدول items كلها NULL
من فوائد Left Join يمكنك حساب عدد السجلات المرتبطة بسجل رئيسي مثل سجل الموظف
Mohammed


mysql> SELECT employee.*,count(items.id) AS itemsNumber
FROM employee LEFT JOIN items ON employee.id = items.employee_id
GROUP BY employee.id;
+-----------+----+--------+-------------+
| name | id | salary | itemsNumber |
+-----------+----+--------+-------------+
| Ahmed | 1 | 0 | 2 |
| Abdulaziz | 2 | 0 | 1 |
| Mohammed | 3 | 0 | 0 |
+-----------+----+--------+-------------+
3 rows IN SET (0.00 sec)


ونفس الفكرة عند حساب تعليقات موضوع في المنتديات مثلا .

Right-Join

ادائها معاكس ل Left Join حيث انها تشترط وجود سجل في الجانب الايمن (Items)ولاتشترط وجود شئ في الجانب الايسر (Employee).

اضافة جملة Where

عند حاجتك لاستخدام جملة where لابد من استخدامها بعد ال Join


SELECT employee.*,count(items.id) AS itemsNumber
FROM employee LEFT JOIN items ON employee.id = items.employee_id
WHERE employee.salary > 1000
GROUP BY employee.id;




Self-Join

دمج الجدول مع نفسه ..
سنضيف تعديلا على جدول الموظفين (سنضيف حقل لرقم المدير) طبعا المدير سيكون احد الموظفين لذلك لاداعي لانشاء جدول للمدراء


ALTER TABLE `employee` ADD `manager_id` INT(4)


الان اعط كل من Ahmed و Abdulaziz رقم المدير الخاص بهم هو 3 أي ان محمد هو مديرهم جميعا


UPDATE `employee` SET `manager_id`=3 WHERE `id`=1;
UPDATE `employee` SET `manager_id`=3 WHERE `id`=2




الان سنقوم بعملية دمج الجدول مع نفسه ليخرج لدينا جدول جديد اسمه جدول المدراء


mysql> SELECT employee.*,managers.name AS managerName FROM employee
-> LEFT JOIN employee AS managers ON managers.id = employee.manager_id;
+-----------+----+--------+------------+-------------+
| name | id | salary | manager_id | managerName |
+-----------+----+--------+------------+-------------+
| Ahmed | 1 | 0 | 3 | Mohammed |
| Abdulaziz | 2 | 0 | 3 | Mohammed |
| Mohammed | 3 | 0 | NULL | NULL |
+-----------+----+--------+------------+-------------+
3 rows IN SET (0.00 sec)





اتمنى وفقت في كتابة شئ مفيد وجديد
الرجوع الى أعلى الصفحة اذهب الى الأسفل
نيوتن
المراقب العام للمنتدى
نيوتن


عدد المساهمات : 1202
نقاط : 108522
تاريخ التسجيل : 04/11/2009
الجنس : ذكر
دولــتــي : استعلامات MySQL بشكل متقدم Unknow10
رسالة sms لا إله إلا أنت سبحانك إني كنت من الظالمين

استعلامات MySQL بشكل متقدم Empty
مُساهمةموضوع: رد: استعلامات MySQL بشكل متقدم   استعلامات MySQL بشكل متقدم Emptyالخميس يونيو 10, 2010 8:07 am

استعلامات MySQL بشكل متقدم 485332
الرجوع الى أعلى الصفحة اذهب الى الأسفل
المهندس
المدير العام
المهندس


عدد المساهمات : 2256
نقاط : 111860
تاريخ التسجيل : 27/10/2009
الجنس : ذكر
دولــتــي : استعلامات MySQL بشكل متقدم Unknow10
رسالة sms بسم الله أصبحنا و أمسينا أشهد أن لا إله إلا الله و أن محمد رسول الله ، وأن الجنة حق ، والنار حق ، وأن الساعة آتية لا ريب فيها ، و أن الله يبعث من في القبور

استعلامات MySQL بشكل متقدم Empty
مُساهمةموضوع: رد: استعلامات MySQL بشكل متقدم   استعلامات MySQL بشكل متقدم Emptyالسبت يونيو 12, 2010 4:09 am



ممتاااااز و لكن عندي ملاحظة و هي ان يتم وضع الاكواد التي بالموضوع بشكل

يمكن التعرف عليها

مثل:

الكود:
يتم كتابة الكود هنا

و الف شكر مرة أخرى

استعلامات MySQL بشكل متقدم 789699
الرجوع الى أعلى الصفحة اذهب الى الأسفل
https://al-ghad.ahlamontada.com
عامر
رئاسة الإشراف
عامر


عدد المساهمات : 494
نقاط : 104635
تاريخ التسجيل : 23/02/2010
الجنس : ذكر
دولــتــي : استعلامات MySQL بشكل متقدم Syrian10
رسالة sms لا إله إلا الله محمد رسول الله

استعلامات MySQL بشكل متقدم Empty
مُساهمةموضوع: رد: استعلامات MySQL بشكل متقدم   استعلامات MySQL بشكل متقدم Emptyالسبت يونيو 12, 2010 4:18 am

جزيت الفردوس أختي الفاضلة اسلام

و شكرا جزيلا لك أخي العزيز المهندس على الشرح المفيد
الرجوع الى أعلى الصفحة اذهب الى الأسفل
http://brmjaameer.ahlamoontada.com
 
استعلامات MySQL بشكل متقدم
الرجوع الى أعلى الصفحة 
صفحة 1 من اصل 1
 مواضيع مماثلة
-
» العلاقة بين ال Html و ال Php و Mysql
» كود ترحيب بشكل رائع
» كود ترحيب بشكل رائع
» ماذا لو أنقطع الإنترنت بشكل نهائي كيف ستكون حياتك
» كود حالة الطقس فى جميع انحاء العالم بشكل جميل جد

صلاحيات هذا المنتدى:لاتستطيع الرد على المواضيع في هذا المنتدى
:: شبكة الغد :: :: ::: منتدى الكمبيوتر و الانترنت ::: :: قسم لغة البرمجة-
انتقل الى:  
©phpBB | منتدى مجاني | منتدى مجاني للدعم و المساعدة | التبليغ عن محتوى مخالف | آخر المواضيع