وين الشباب..انا الحين وصلت لـ6 طرق بـ20 سطر...بس منتظر حلولكم عشان انزل دالتي
وين الشباب..انا الحين وصلت لـ6 طرق بـ20 سطر...بس منتظر حلولكم عشان انزل دالتي
نرجو توضيح الطلب اكثر .. انا عملت بالكود السابق ما طلبت لكن يفضل ان تضع الطلب كامل حتى تسمح للجميع بالمشاركة والتفكير ..
وكذلك من الافضل ان يتم سؤال اسئلة ذات افكار تنمي روح المنافسة لكن صحيح من الافضل لفكرتك عمل كلاس لها كما قال الاخ DSQ8.com
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
طيب ياخ مهندس مصري هذي الدالة الي توصلتلها
وتقدر تختصر الداله وتضيف طرق اخرى
وطرق البحث كالتالي:كود PHP:
function search($word){
if(preg_match('/^(".*")$/',$word)){
return"SELECT * FROM `news` WHERE title like '%".str_replace('"',"",$word)."%'";
}elseif(preg_match('/(between:)/',$word)){
$s=explode("between:",trim($word));
$b=explode(",",$s[1]);
return"SELECT * FROM `news` WHERE `date` BETWEEN '".trim($b[0])."' AND '".trim($b[1])."' AND `title` LIKE '%".$s[0]."%' ";
}elseif(preg_match('/^(user:)/',$word)){
$s=explode("user:",trim($word));
return"SELECT * FROM `news` WHERE `username` ='".$s[1]."'";
}elseif(preg_match('/(user:)/',$word)){
$s=explode("user:",trim($word));
return"SELECT * FROM `news` WHERE `title` LIKE '%".$s[0]."%' AND `username` ='".$s[1]."'";
}elseif(preg_match('/^(info:)/',$word)){
$s=explode("info:",trim($word));
return"SELECT * FROM `user` where `name` ='".$s[1]."'";
}else{
return"SELECT * FROM `news` where title like '%".str_replace(' ',"%",$word)."%'";
}
}
1-للبحث عن مشاركات عضو:
2- للبحث عن كلمة بمشاركات عضو نستخدم:كود PHP:
search('user:hatem');
3-للبحث المطابق نستخدم علامة التصنيص:كود PHP:
search('كلمة البحث user:hatem');
4-للبحث عن معلومات عضو:كود PHP:
search('"كلمة البحث"')
وسيظهر معلومات العضو وليش مشاركاتهكود PHP:
search('info:hatem')
5-للبحث عن شي بين تاريخين:
6-للبحث العادي..اي عكس البحث المطابق:كود PHP:
search("كلمة البحث between:2009-09-01,2009-09-02")
جربها عندك...وراح تعطيك صيغة استعلام sqlكود PHP:
search('كلمة البحث')
![]()
اعتذر عن عدم المشاركه
هل ياترى انتهى السؤال.. لأني ارى اجابات جميله
ومن عليه السؤال الان ؟![]()
__________________
مملكة الموت
=======================
100(سبحان الله وبحمده ،،، سبحان الله العظيم) = 0 سيئة
خلاص شوفلنا سؤال غيره..
مهندس مصري كان عنده سؤال,,
سؤالي سيكون في قواعد البيانات..
لدينا جدول يسمى (magazines) وهو جدول مجلات و يمكن عمل صفحات فرعية من المجلة في نفس الجدول كفكرة الاقسام عن طريق parent_id للصفحة
الجدول يحتوي على الحقول التالية..
id
parent_id
title
visits
- المجلة الرئيسية ال parent_id لها = 0
- المجلة الفرعية ال parent_id لها قيمته هو قيمة ال id الرئيسي لها كفكرة عمل الاقسام تماماً
- title هو عنوان كل مجلة سواء كانت رئيسية او فرعية
- visits عدد الزيارات لكل مجلة بغض النظر عن كونها رئيسية او فرعية
نريد عمل استعلام واحد يقوم بترتيب المجلات الرئيسية حسب الاعلى زيارة مع الاخذ في الحسبان ان ترتيب زيارات المجلة الواحدة = (زيارة المجلة الرئيسية + زيارات المجلات الفرعية منها)
اي يتم الترتيب على هذا الاساس ولا يعرض لنا الا عناوين المجلات الرئيسية فقط
أذكركم بالشروط مرة أخرى ..
1- استعلام واحد فقط لعمل المطلوب بدون ادخال اي عملية php (أي أن المطلوب كله هو استعلام mysql).
2- زيارة المجلة كاملة = (زيارات المجلة الرئيسية + زيارات المجلات الفرعية منها مهما كان عددها).
3- يتم الترتيب على اساس زيارة المجلة كاملة كما ورد بالنقطة رقم 2.
4- بعد الترتيب يعرض لنا فقط عناوين المجلات الرئيسية فقط مُرتبة ترتيبا تنازلياً حسب زيارات المجلة كاملة كما في النقطة 2
طبعاً أنا قمت بعمل هذا الاستعلام بعد عناء كبير والحمد لله قمت بعمله بعد عدة محاولات
طبعاً هناك فكرة افضل وهو عمل عداد counter خاص بالمجلة كاملة بما فيها الرئيسية والفرعية حتى يكون الاستعلام بحقل واحد عادي دون اجراء عمليات ملتوية او عمليات حسابية لكن انا احاول تشغيل العقول بهذه الافكار
يلا ننتظر الحلول العبقرية![]()
التعديل الأخير تم بواسطة مهندس مصرى ; 07-09-2009 الساعة 11:38 PM
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
^
يعني السؤال لخبراء sql
هذا الاستعلام الي وصلتله..لكنه مو كامل
يعني يعرض مجموع الزياراتSELECT *,sum(visits) AS v FROM `magazines` where parent_id='1' GROUP BY id ORDER BY `visits` DESC
ويرتبها حسب اعلى زياره
ولي محاول اخرى ان شالله
بس قولي قربت من الحل ولالا.؟
لا يا حج
هذا الحل بسيط جدا ولا يحتاج لسؤال
لكن ما اريده هو جمع الزيارات الفرعية للملف ايضا على الزيارات الرئيسية وترتيبهم على حسب نتيجة الجمع وليس على حسب زيارة ملف واحد كما كتبت بالاستعلام
وساوضح بمثال بسيط ..
لدينا الان عدد 3 مجلات في الجدول
المجلة الاولى .. عبارة عن صفحة رئيسية و عدد صفحات (2) فرعية منها
سنمثلهم كالتالي في قاعدة البيانات
id->1
parent_id->0
visits->280
---------------
id->2
parent_id->1
visits->500
---------------
id->3
parent_id->1
visits->370
المجلة الثانية .. عبارة عن صفحة رئيسية وصفحة واحدة فرعية
id->4
parent_id->0
visits->311
---------------
id->5
parent_id->4
visits->800
---------------
المجلة الثالثة.. عبارة عن صفحة رئيسية و 3 صفحات فرعية منها
id->6
parent_id->0
visits->555
---------------
id->7
parent_id->6
visits->113
---------------
id->8
parent_id->6
visits->674
---------------
id->9
parent_id->6
visits->467
الان غيرت لك اللون parent_id في المجلة الرئيسية حتى يتم تمييز انها المجلة الرئيسية
الان المطلوب جمع زيارات كل مجلة بما فيها بالمجلات الفرعية منها كالتالي:
المجلة الاولى الزيارات = 280 + 500 + 370 = 1150
المجلة الثانية الزيارات = 311 + 800 = 1111
المجلة الثالثة الزيارات = 555 + 113 + 674 + 467 = 1809
اعتقد ان الامر واضح الان .. وبعد ذلك يجب ان يكون الترتيب على حسب نتائج هذا الجمع ترتيب تنازلي ..
اي سيكون الترتيب في العرض
- المجلة الثالثة لانها اكثر زيارات 1809
- المجلة الاولى زيارات 1150
- المجلة الثانية زيارات 1111
التعديل الأخير تم بواسطة مهندس مصرى ; 08-09-2009 الساعة 01:01 PM
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير
سؤال جميل جداوصعب أيضا
ولكن سأحاول به ان شاء الله
__________________
مملكة الموت
=======================
100(سبحان الله وبحمده ،،، سبحان الله العظيم) = 0 سيئة
الحمدلله بعد عناء شديد :con2:
تم التجريب واعطت النتائج المطلوبه :]كود:SELECT a.mag_title, a.mag_visits + sum(b.mag_visits) as total_visits FROM magazines a, magazines b WHERE a.mag_parent_id=0 AND b.mag_parent_id=a.mag_id GROUP BY a.mag_title ORDER BY total_visits DESC
بالتوفيقكود HTML:mag c (1809) mag a (1150) mag b (1111)![]()
__________________
مملكة الموت
=======================
100(سبحان الله وبحمده ،،، سبحان الله العظيم) = 0 سيئة
DSQ8.com ممكن تعطينا كود قاعدة البينات الي اشتغلت عليه
حاب اجرب واغير وبشوف وش يطلعلي^,^
تفضل ياغالي
كود:CREATE TABLE IF NOT EXISTS `magazines` ( `mag_id` int(11) NOT NULL auto_increment, `mag_parent_id` int(11) NOT NULL default '0', `mag_title` varchar(50) NOT NULL, `mag_visits` int(11) NOT NULL, PRIMARY KEY (`mag_id`) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 AUTO_INCREMENT=10 ; INSERT INTO `magazines` (`mag_id`, `mag_parent_id`, `mag_title`, `mag_visits`) VALUES (1, 0, 'mag a', 280), (2, 1, 'mag a 1', 500), (3, 1, 'mag a 2', 370), (4, 0, 'mag b', 311), (5, 4, 'mag b 1', 800), (6, 0, 'mag c', 555), (7, 6, 'mag c 1', 113), (8, 6, 'mag c 2', 674), (9, 6, 'mag c 3', 467);
__________________
مملكة الموت
=======================
100(سبحان الله وبحمده ،،، سبحان الله العظيم) = 0 سيئة
يعطيك العافيه ..
بس ياليت لو مافيها كلافه عليك لو تشرحلنا الاستعلام شوي..ﻷن خبرتي متوسطه بال sql^,^
ماشاء الله .. نفس الفكرة تماماً لكنك اعتمدت على الاختصارات
هي في الاصل استعلامك يترجم الى الجملة join بعد كتابته
لذلك جرب اضافة مجلة رئيسية لها parent_id =0 بدون اضافة مجلات فرعية لها فلن يعرضها ضمن النتائج
هل تعرف لماذا؟؟
وجرب هذا الكود وكودك وشوف ما الفرق (طبعا بعد اضافة ملف رئيسي بدون اي ملفات فرعية)
كود PHP:
SELECT a.mag_title, a.mag_visits + sum( b.mag_visits ) AS total_visits
FROM magazines AS a
LEFT JOIN magazines AS b ON b.mag_parent_id = a.mag_id
WHERE a.mag_parent_id =0
GROUP BY mag_title
ORDER BY total_visits DESC
التعديل الأخير تم بواسطة مهندس مصرى ; 08-09-2009 الساعة 11:39 PM
__________________
قل اللهم مالك المُلك تؤتي الملك من تشاء وتنزع الملك ممن تشاء وتعز من تشاء وتذل من تشاء بيدك الخير انك على كل شىء قدير