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

كيف استعلام عن تاريخ باضافه ايام عليه

بدأه man in dark في 7 سبتمبر 2011 · 43 رد · 2,197 مشاهدة · في منتدى تطوير المواقع بـ PHP
مشاركة: واتساب X فيسبوك تيليجرام
#26

اخي يظهر الخطاء

FUNCTION www.GROUP_CONCAT does not exist

الكود المستخدم

<?php

$host="localhost";
$username="root"; 
$password="";
$db_name="www";

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 


$sql="select students.name ,GROUP_CONCAT ( education.education)  from students , education  where students.link <>education.link group by  students.name";


$result=mysql_query($sql) or die(mysql_error());  

while($row=mysql_fetch_array($result)){ ?>
<?php echo $row['name']; ?>  <?php echo $row['education'];  ?><br>
<?php
} 

?>

تم تعديل هذه المشاركة بواسطة man in dark في 10 سبتمبر 2011 في 19:07

#27

يظهر لي اسما فقط هكذا ناتج الاستعلام...

عبدالله

محمد

بدون اظهار اسماء المواد التي لم يختبرونها........

ولكن بعد تعديل الكود باضافه education.education

يظهر لي ناتج الاستعلام...

عبدالله فيزياء

محمد رياضيات

ومن المفترض ان يظهر ناتج الاستعلام للطلاب للمواد التي لم يختبرونها ......

عبدالله رياضيات - فيزياء - القران الكريم

محمد رياضيات - انجليزي

الكود المستخدم

<?php

$host="localhost";
$username="root"; 
$password="";
$db_name="www";

mysql_connect("$host", "$username", "$password")or die("cannot connect"); 
mysql_select_db("$db_name")or die("cannot select DB"); 


$sql="select students.name ,education.education, GROUP_CONCAT( education.education)  from students , education  where students.link <>education.link group by  students.name";


$result=mysql_query($sql) or die(mysql_error());  

while($row=mysql_fetch_array($result)){ ?>
<?php echo $row['name']; ?>  <?php echo $row['education'];  ?><br>
<?php
} 

?>

post-131439-004450400%201315483024.jpg

post-131439-092904000%201315405653.jpg

تم تعديل هذه المشاركة بواسطة man in dark في 10 سبتمبر 2011 في 19:37

#28

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

اسمح لي أخي الكريم مان إن دارك

أن نغير تركيبة الجداول الخاصة بك بما يتفق مع قواعد بناء قواعد البيانات

أولاً : إذا كنت ترغب في تسجيل اسم الطالب وهذا يمكن تكراره (لأن الطالب يمكن أن يدخل اختبار أكثر من مادة)

وكذلك ترغب في تسجيل المواد ويمكن تكرارهم (لأن المادة يمكن ان يدخلها أكثر من طالب)

إذاً

نحتاج لثلاثة جداول

الأول جدول المواد(بدون تكرار) وبه حقو مثل رقم المادة واسم المادة وملاحظات مثلا

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

الثالث جدول تسجيل الاختبارات وبه رقم الاختبار ومعرف الطالب (يؤخذ من جدول الطلاب) ومعرف المادة (يؤخذ من جدول المواد) وتاريخ الاختبار وملاحظات مثلا

جرب هذه الطريقة في بناء قاعدة بياناتك

وستجد أن استخراج المطلوب فيها أسهل بكثييييير

2

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#29

حسناً, +1 لـ mas123 فكرته جيدة, فتعديل شكل قاعدة البيانات أمر واجب فالربط الحالي بين الجدولين خاطئ ولا يؤدي المطلوب

فوجود الحقل link في الجدولين أمر غير صحيح, على أقل تقدير عليك العمل على primary/foreign keys

طريقة جدول الربط تقدم حلاً لمشكلتك, وهي الطريقة الأفضل من حيث تنظيم البيانات و تسهيل الاستعلامات خصوصاً في حال كان لديك معرفة مسبقة بأن حجم البيانات المخزنة سيصبح كبيراً جداً في المستقبل

ملاحظة:

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

وإنما عليك احضار اسماء جميع المواد(باستعلام منفصل) + اسماء المواد الذي اختبرها كل طالب(باستعلام آخر)

فتقوم بمقارنتها برمجياً بـ PHP واستخلاص المواد التي لم يختبرها الطالب

والله أعلم

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 11 سبتمبر 2011 في 01:32

Everything will be fine when we TALK LESS, DO MORE


#30

بإمكانك أن تكون القاعدة هكذا

أتمنى أن تفيدك هذه الجداول

CREATE TABLE IF NOT EXISTS `exams` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `exam_code` int(5) NOT NULL,
  `ed_code` int(5) NOT NULL,
  `add_date` date NOT NULL,
  `std_link` int(5) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



CREATE TABLE IF NOT EXISTS `eduaction` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `ed_name` varchar(25) NOT NULL,
  `ed_code` int(20) NOT NULL,
  `add_date` date NOT NULL,
  `exp_date` date NOT NULL,
  `exam_link` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



CREATE TABLE IF NOT EXISTS `students` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `lastname` varchar(25) NOT NULL,
  `age` int(4) NOT NULL,
  `reg_date` date NOT NULL,
  `exam_link` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;
#31

+1 للاخ mas123

لازم تفضل القاعدة لثالث جداول

وممكن تستخدم الــ structure اللى عمله الاخ لامارتير مع بعض التعديلات اذا الاخ لامارتير اذنلى

CREATE TABLE IF NOT EXISTS `exams` (
  `exameid` int(4) NOT NULL AUTO_INCREMENT,
  `studentid` int(5) NOT NULL,
  `eductionid` int(5) NOT NULL,
  `add_date` date NOT NULL,
  `end_dat` date NOT NULL,
  `exam_done` int(1) default '0',
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



CREATE TABLE IF NOT EXISTS `eduaction` (
  `eductionid` int(4) NOT NULL AUTO_INCREMENT,
  `ed_name` varchar(25) NOT NULL,
  `ed_code` int(20) NOT NULL,
  `add_date` date NOT NULL,
  `exp_date` date NOT NULL,
  `exam_link` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;



CREATE TABLE IF NOT EXISTS `students` (
  `studentid` int(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  `lastname` varchar(25) NOT NULL,
  `age` int(4) NOT NULL,
  `reg_date` date NOT NULL,
  `exam_link` int(4) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 AUTO_INCREMENT=1 ;

الشغل كله حيبقى على جدول الـ exams

حنبدأ باضافة امتحان مثلا للـ طالب محمد اللى الــ id بتاعه مثلا 5

فى مادة الفيزياء اللى الــ ID يتاعها 3

حتبتدى فى اليوم الفلانى و اخر ميعاد اليوم الفلانى

فى حال ان محمد اخد الامتحان فى الفترة المحددة تعمل تعديل للـحقل exam_done تخليه 1

لو محضلش حيفضل 0 زى ما هو معنى كده ان الامتحان متخدتش

و انت بتستعمل بقى لو عايز تجيب الامتحانات اللى محمد حضرها حتقول مثلا يعنى

$query = "SELECT * FROM exams WHERE studentid = '5' AND exam_done = '1'";

لو عايزين الامتحانات اللى محمد محضرهاش حتخلي قيمة exam_done 0 بدل 1 فى الاستعلام وممكن طبعا تزود فى الاستعلام لو عايزين تبحث على مادة معينة

Life is not the amount of breaths you take, it's the moments that take your breath away

#32

لسهوله عمل الجداول سويت ثلاثة جداول

الاول education ويحتوي على المواد التعليمية

post-131439-045000800 1315722317_thumb.j

والربط عن طريق حقل link

الثاني students ويحتوي على اسماء الطلاب

post-131439-008881100 1315722325_thumb.j

والربط عن طريق حقل studentsid

الثالث educationanswer ويحتوي على تسجيل الاختبارات وبه معرف الطالب (studentsid) ومعرف المادة (link)

post-131439-091046800 1315722329_thumb.j

الجدول يربط جدول education عن طريق حقل link ... ويربط جدول students عن طريق حقل studentsid

قاعدة البيانات

-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
-- 
-- المزود: localhost
-- أنشئ في: 11 سبتمبر 2011 الساعة 09:29
-- إصدارة المزود: 5.0.22
--  PHP إصدارة: 4.4.4
-- 
-- قاعدة البيانات: `www`
-- 

-- --------------------------------------------------------

-- 
-- بنية الجدول `education`
-- 

CREATE TABLE `education` (
  `id` int(50) NOT NULL auto_increment,
  `education` varchar(50) NOT NULL,
  `data` varchar(50) NOT NULL,
  `link` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1256 AUTO_INCREMENT=5 ;

-- 
-- إرجاع أو إستيراد بيانات الجدول `education`
-- 

INSERT INTO `education` (`id`, `education`, `data`, `link`) VALUES 
(1, 'رياضيات', '1314853200', '3'),
(2, 'فيزياء', '1314853200', '7'),
(3, 'انجليزي', '1314853200', '8'),
(4, 'القران الكريم', '1314853200', '9');

-- --------------------------------------------------------

-- 
-- بنية الجدول `educationanswer`
-- 

CREATE TABLE `educationanswer` (
  `id` int(50) NOT NULL auto_increment,
  `students` varchar(50) NOT NULL,
  `studentsid` varchar(50) NOT NULL,
  `testname` varchar(50) NOT NULL,
  `rate` varchar(50) NOT NULL,
  `datatest` varchar(50) NOT NULL,
  `link` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1256 CHECKSUM=1 DELAY_KEY_WRITE=1 AUTO_INCREMENT=30 ;

-- 
-- إرجاع أو إستيراد بيانات الجدول `educationanswer`
-- 

INSERT INTO `educationanswer` (`id`, `students`, `studentsid`, `testname`, `rate`, `datatest`, `link`) VALUES 
(1, 'محمد', '8844', 'رياضيات', '100', '1312792640', '3'),
(2, 'عبدالله', '4195', 'فيزياء', '75', '1313002667', '7'),
(3, 'خالد', '3316', 'انجليزي', '50', '1315205799', '8'),
(4, 'محمد', '8844', 'فيزياء', '50', '1315299443', '7');

-- --------------------------------------------------------

-- 
-- بنية الجدول `students`
-- 

CREATE TABLE `students` (
  `id` int(50) NOT NULL auto_increment,
  `fullname` varchar(50) NOT NULL,
  `studentsid` varchar(50) NOT NULL,
  PRIMARY KEY  (`id`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1256 AUTO_INCREMENT=6 ;

-- 
-- إرجاع أو إستيراد بيانات الجدول `students`
-- 

INSERT INTO `students` (`id`, `fullname`, `studentsid`) VALUES 
(1, 'محمد', '8844'),
(2, 'عبدالله', '4195'),
(3, 'خالد', '3316');

كيف يمكن عمل الاستعلام الان.....

المرفقات
1.JPG2.JPG3.JPG
#33

يبدو أنك أخي الكريم لم تفهم ماقصدته وما سعى اﻹخوة في توصيله لك

بإذن الله سوف أجتهد في تصميم قاعدة البيانات التي تحتاجها وصور اﻻستعﻻم التي تريدها

ولكني اﻵن مشغوﻻ ربما يكون مساء

إذا لم يتمكن أحد اﻹخوة من وضع تركيبة قاعدة البيانات الصحيحة

وصور لﻻستعﻻمات التي يريدها اﻷخ الكريم

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#34

الله يعطيك العافيه اخي mas123 وجميع الاخوه الذين يحاولن مساعدتي

وبانتظار مساعدتكم لي...

#35

تفضل أخي الكريم

هذا تصور بسيط بقاعدة البيانات

--
-- Table structure for table `eduaction`
--

CREATE TABLE IF NOT EXISTS `education` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `ed_name` varchar(25) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `eduaction`
--

INSERT INTO `education` (`id`, `ed_name`) VALUES
(1, 'القرآن الكريم'),
(2, 'اللغة اﻹنجليزية'),
(3, 'الرياضيات'),
(4, 'الفيزياء');

-- --------------------------------------------------------

--
-- Table structure for table `exams`
--

CREATE TABLE IF NOT EXISTS `exams` (
  `examid` int(4) NOT NULL AUTO_INCREMENT,
  `studentid` int(5) NOT NULL,
  `educationid` int(5) NOT NULL,
  `examdate` int(10) NOT NULL,
  PRIMARY KEY (`examid`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=5 ;

--
-- Dumping data for table `exams`
--

INSERT INTO `exams` (`examid`, `studentid`, `educationid`, `examdate`) VALUES
(1, 1, 3, 1312792640),
(2, 2, 4, 1313002667),
(3, 3, 2, 1315205799),
(4, 1, 4, 1315299443);

-- --------------------------------------------------------

--
-- Table structure for table `students`
--

CREATE TABLE IF NOT EXISTS `students` (
  `id` int(4) NOT NULL AUTO_INCREMENT,
  `name` varchar(25) NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 AUTO_INCREMENT=4 ;

--
-- Dumping data for table `students`
--

INSERT INTO `students` (`id`, `name`) VALUES
(1, 'محمد'),
(2, 'عبد الله'),
(3, 'خالد');

وهذا الاستعلام لجلب المواد التي لم يختبرها الطالب محمد (الذي رقم معرفه 1)

select ed_name from education where id in (select id from education where id not in(select educationid from exams where studentid=1))

جرب وأخبرني بالنتيجة

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#36

الله يعطيك العافيه اخي mas123 الان الكود يعمل ...

ولكن انت وضعت على اسم محمد فقط كيف اخلي الكود يبحث على جميع الاسماء وليس محمد فقط

#37

أخي الكريم

آخر رقم في الاستعلام هو1

where studentid=1

فواحد هو محمد

وإذا اردت أي طالب آخر يمكنك وضع رقمه بدلا من 1 في الاستعلام

تقبل تحياتي

وأنصحك أخي الكريم بقراءة كتب في أساسيات اللغة وأساسيات sql

مثل هذا الموضوع

/index.php?showtopic=59923

وهذا

/index.php?showtopic=88887

وهذا

/index.php?showtopic=47847

ويمكنك الدخول على هذا الموقع

http://www.w3schools.com/php

وهذا

http://www.w3schools.com/sql

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#38

اخي اعلم انه لابد من تغيير where studentid=1

لان محمد هو 1

...

انا الذي اريده ان يظهر لي الاستعلام جميع اسماء الطلاب وليس طالب واحد فقط

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

يعني مثلا في ناتج الاستعلام يظهر لي...

محمد لم يختبر الرياضيات

محمد لم يختبر فيزياء

خالد لم يختبر انجليزي

عبدالله لم يختبر القران الكريم

وهكذا.....

تم تعديل هذه المشاركة بواسطة man in dark في 11 سبتمبر 2011 في 21:45

#39

اعمل حلقة تكرار من خلال الاستعلام

select id from students

واستعمل رقم id الذي يعطيه لك الاستعلام في الاستعلام السابق

التغير هو القانون الدائم للحياة.ودوام الحال من المحال

فلماذا لا نتغير بإرادتنا إلى ما نريد؟ قبل أن تغيرنا الحياة مجبرين إلى ما لا نريد؟

موقعي

#40

اخي حاولت ولكن لم انجح لو ممكن المساعدة.........

#41

بناء على قاعدة البيانات المقترحة من mas123

نظرياً هذا الاستعلام سيفي بالغرض بإذن الله:

SELECT DISTINCT name , ed_name
FROM students std, education edu, exams ex
WHERE std.id = studentid
AND edu.id NOT
IN (
SELECT educationid
FROM exams
WHERE studentid = std.id
)

جرب و أخبرني بالنتيجة

بتوفيق الله...

Everything will be fine when we TALK LESS, DO MORE


#42

الله يعطيك العافيه اخي MoHaMMaD Pro الكود رائع ...

بس جزئيه بسيط لم يظهرها ان عند وجود اسم طالب في قائمة الاسماء ولكن لم يختبر اي مادة (يعني لم يختبر ابدا)

لايظهر اسم الطالب

بناء على قاعدة البيانات المقترحة من mas123

اضفت اسم ( صالح ) والطالب صالح لم يختبر اي مادة ....لايظهره في ناتج الاستعلام ابدا

post-131439-030040800 1315833586_thumb.j

المرفقات
1.JPG
#43

حسنا لا مشكلة, ازل العلاقة بين جدول الـ exams و الـ students من الاستعلام و سيفي ذلك بالغرض

حيث أني اعتمدت في الاستعلام السابق على الطلاب الذين قاموا باداء ولو امتحان واحد

جرب هذا الاستعلام:

SELECT name, ed_name
FROM students std, education edu
WHERE edu.id NOT
IN (

SELECT educationid
FROM exams
WHERE studentid = std.id
)
1

Everything will be fine when we TALK LESS, DO MORE


#44

الف الف الف شكر والله يعطيك العافيه اخي MoHaMMaD Pro ابداع ماشاء الله تبارك الله

الكود الان 100%

وشكر خاص لكل الذين ساعدوني الله يعطيهم العافيه اخواني

La Martir

ihope

mas123

فؤاد عبد الرازق

1

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

عدد الزوار حالياً

المتواجدون خلال آخر دقيقتين · يتحدّث كل ٣٠ ثانية

—الإجمالي—أعضاء مسجّلون—زوار بدون تسجيل

جارٍ التحقق من المتواجدين…