الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة فى جملة استعلام

مغلق
بدأه prince of egypt في 27 أغسطس 2005 · 11 رد · 937 مشاهدة · في منتدى تصميم صفحات الويب
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

السلام عليكم ورحمة الله وبركاته

اخوانى بالمنتدى كيف حالكم انا شاء الله تكونوا بخير

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

الحملة دى بتعمل بحث فى قاعدة بيانات وبتعمل جوين بين اكتر من جدول لكن المشكلة انها على السيرفر بتاخد وقت كبير جداا لدرجة انها بتهنج كل السايت مع ان السيرفر قوى جدا

مع العلم ان قاعدة البيانات اكسيس " واعتقد ان هذا اسوا ما فى الموضوع"

وكمان فى عدد كبير من الريكورد يعنى عندى جدول فيه 10000 ريكورد وجدل 4000 مع انى اعتقد ان العدد ده مش كبير اوى انا سبق واتعاملت مع قواعد بيانات اكسيس كان فيها عدد مماثل لكن ما كنش فيه تعقيد جامد فى العلاقات بين الجدول

ده شكل الجملة واتمنى ان حد يقدر يساعدنى

 SQL="select Exams.*,Subjects.*,Modules.*,Quiz.*,Questions.* from Exams,Subjects,Modules,Quiz,Questions "
 SQL=SQL & " where Modules.Module_ID=Quiz.Quize_ModuleID"
 SQL=SQL & " and Exams.Exam_ID=Subjects.Subject_ExamID"
 SQL=SQL & " and Subjects.Subject_ID=Modules.Module_SubjectID"
 SQL=SQL & " and Quiz.Quize_ID=Questions.Question_QuizID"
 if Quiz <> "" then SQL=SQL & " and Quiz.Quize_name like '%" & Quiz & "%',"
 SQL=SQL & " and Modules.Module_ID= " & Module

جربت انى اقلل الداتا اللى برجعها من كل الجداول فكان شكل الجملة كالاتى

 SQL="select Distinct(Quiz.QuizID) from Exams,Subjects,Modules,Quiz,Questions "
 SQL=SQL & " where Modules.Module_ID=Quiz.Quize_ModuleID"
 SQL=SQL & " and Exams.Exam_ID=Subjects.Subject_ExamID"
 SQL=SQL & " and Subjects.Subject_ID=Modules.Module_SubjectID"
 SQL=SQL & " and Quiz.Quize_ID=Questions.Question_QuizID"
 if Quiz <> "" then SQL=SQL & " and Quiz.Quize_name like '%" & Quiz & "%',"
 SQL=SQL & " and Modules.Module_ID= " & Module

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

فيا ريت حد يقدر يساعد فى الموضوع ده ويقولى لو عندى حاجة غلط

وشكرا مقدما

تم تعديل هذه المشاركة بواسطة prince of egypt في 27 أغسطس 2005 في 13:52

#2

لو تعطيني تصور واضح عن الإستعلام والغرض منه كان أساعدك لأن هذا الإستعلام بطئ نسبياً.

جرب كلمة join للربط

(يمكنك ذلك بتوضيح العلاقات بين الجداول في Access وعمل الإستعلام بوضع التصميم بسهولة)

وكذلك الإستعلامات المتداخلة لخفض زمن النتفيذ

#3

السلام عليكم ورحمة الله وبركاته

الاخ الكريم موسى اشكرك على ردك وتفاعلك معى

اولا هذا الموقع عبارة عن تدريب على امتحان اون لاين

الموقع يحتوى على مجموعة من الامتحانات Exams كل امتحان به مجموعة من المواد Subjects كل مادة بها مجموعة من الموديول Module كل موديول يحتوى على مجموعة من رؤس الاسئلة Quizs

كل راس سؤال يحتوى على مجموعة من الاسئلة Questions

اعتقد ان العلاقات بين الجدوال الان واضحة المطلوب هو تمكين المستخدمين من البحث فى الاسئلة فيمكنه من اختيار امتحان معين ومادة معينة تخص هذا الامتحان وموديول معين تحت هذه المادة

الامور حتى الان جيدة ولكن المطلوب البحث بكلمة معينة او مجموعة من الكلمات فى جدولى Quizs and Qestions

اذا كان راس السؤال Quiz يحتوى على هذه الكلمة او الكلمات وهى غير موجودة فى جدول ال Question

او ان تكون هذه الكلمة موجوده فى ال Qestion وغير موجودة فى ال Quiz او موجودة فى الاتنين

المطلوب تضمين هذا ال Quiz ضمن النتيجة

اتمنى ان تكون الامور واضحة واتمنى المساعدة

وهلى تعتقد ان تكون كل المشكلة فى اضافة كلمة Join

ارجو الرد

#4

سوف أكتب هذا الإستعلام غداً أرجوا أن تعذرني على التأخير...

mossa_610@yahoo.com

#5

أعتقد أخي أن السبب هو العدد الكبير من النتائج التي يعيدها الاستعلام ...

يعني ألا تظن أن 10000 ريكورد هو عدد كبير لكي يتم إرجاعه على الإنترنت !!!!

#6

السلام عليكم ورحمة الله وبركاته

الاخ موسى

شكرا على مشاركتك وانا فى انتظار ردك القادم ولا اود ان اعزجك باستخدام بريدك شكرا لاك على الى حال

الاخ اسماعيل

شكرا لمروك الكريم ولكنى عندى قاعدة بيانات بها عدد اكبر من ذلك ولكن العلاقات بين الجدوال ليست بهذا التداخل

كما انى لا اعيد ال 10000 ريكور كلهم فان ما يرجع من نيجة البحث هو بالتاكيد ليس كل الريكرود بل فقط ما تنطبق عليه الشروط

مروكم اسعدنى كثيرا

واتمنى ان نصل لحل لهذه المشكلة قريبا

والسلام عليكم ورحمة الله وبركاته

#7

أولا الجداول Exam , Subjects المفروض أنها لا تدخل عملية الربط إذا لم تكن تريد أن تعرض نتائجها.

ثانيا ترتيب ربط الجداول هام فإبداء برأس الجداول ثم إلى من هي دونها في الرتبة. أي من الجداول التي تحوي سطور أقل إلى من تحوي سطور أكثر. لتقليل عملية المعالجة. ويجب أن تعرف أنه يتم الربط جدولين جدولين الخ. نظر إلى الجملة بعد الربط مع Join وكذلك ترتيب الربط.

SELECT Exams.*, Subjects.*, Modules.*, Quiz.*, Questions.* 
FROM Exam JOIN Subjects JOIN Modules JOIN Questions
ON Exams.Exam_ID = Subjects.Subject_ExamID
AND Subjects.Subject_ID = Modules.Module_SubjectID
AND Modules.Module_ID = Quiz.Quize_ModuleID
AND Quiz.Quize_ID = Questions.Question_QuizID
WHERE Quiz.Quize_name LIKE '%Any Word%'
AND Modules.Module_ID = 1

ثالثا الاستعلامات الجزئية أسرع في التنفيذ. ولكن قد تحوي بعض القيود. وفي حالتك عندما لا تطبق شرط على الجدول Exam فإنها لن تكون لك واضحة(عديمة الجدوى). وهذه الجملة توضح ذلك:

SELECT Quiz.*
FROM Module JOIN Quiz
ON Modules.Module_ID = Quiz.Quize_ModuleID
WHERE Modules.Module_ID = 1
AND Quiz.Quize_name LIKE '%صعب%'
AND Module_SubjectID IN 
	(	SELECT Subject_ID
  From Subjects
  WHERE Subject_ExamID IN
  (	SELECT Exam_ID
 	 FROM Exam
  )
	)

عندما تحدد ما سوف تعطي الاستعلام وما سوف تأخذ منه. تجد إجابة كاملة بإذن الله.

#8

طيب قد تكون المشكلة أنك تدخل ضمن حلقة لا نهائية عند عرض نتائج الاستعلام,,,,,,,,,,,,,,,, صح؟

#9

السلام عليكم ورحمة الله وبركاته

الاخ الكريم موسى

اشكرك كثيرا على ردك وعلى وقتك وهاجربها ان شاء الله وارد عليك وانا شاكر جدا لتفاعلك معى

الاخ الكريم اسماعيل

لا يا اخى الكريم انا لا ادخل فى حلقات لا نهائية بل انى احيانا كنت بجرب بس انى اعرض عدد نتائج البحث بدون استخدام اى حلقات كانت بتظهر نفس المشكلة وانا شاكر جدا على مداخلاتك واتمنى ات تكون استفدت من ردود الاخ موسى

شكرا مرة اخرى

#10

اخى الكريم للاسف لم يعمل الكود معى

وتظهر هذه الرسالة

Syntax error in FROM clause.

وهذه هى الجملة المستخدمة

SQL="SELECT  Distinct(Quiz.Quize_ID),Quiz.Quize_name"
SQL=SQL & " FROM Exam JOIN Subjects JOIN Modules JOIN Quiz JOIN  Questions "
SQL=SQL & " ON Exams.Exam_ID = Subjects.Subject_ExamID"
SQL=SQL & " AND Subjects.Subject_ID = Modules.Module_SubjectID"
SQL=SQL & " AND Modules.Module_ID = Quiz.Quize_ModuleID"
SQL=SQL & " AND Quiz.Quize_ID = Questions.Question_QuizID"
SQL=SQL & " WHERE (Quiz.Quize_name LIKE '%" & Quiz & "%' "
SQL=SQL & " OR Questions.Question_Question LIKE '%" & Quiz & "%')"
SQL=SQL & " AND Modules.Module_ID = " & Module

وشكرا على تفاعلكم

#11

قد يكون ال Syntax غير مطابق حاول الإستفادة من:

Multiple Joins
You can specify multiple join conditions to join more than two tables in a query. By default, Oracle9i processes the joins from left to right. However, you can control the join order by using parentheses. The following two queries are equivalent: 
SELECT course_name, period, student_name,
  s.grade_level
FROM course c INNER JOIN enrollment e
     USING (course_name, period)
     INNER JOIN student s USING (student_name);


SELECT course_name, period, student_name, 
  s.grade_level
FROM (course c INNER JOIN enrollment e
     USING (course_name, period))
     INNER JOIN student s USING (student_name);

The first query joins COURSE to ENROLLMENT and then joins the result to STUDENT. The second query uses parentheses to specify the exact same join order.

وشكراً

هذا الموضوع مغلق.

مواضيع مشابهة