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

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

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

السلام عليكم

اخواني لدي قاعدة بيانات بهذا الشكل....

الجدول الاول students

يحتوي على اسماء وحقل link للربط بالجدول الاخر

post-131439-029972900 1315404609_thumb.j

الجدول الثاني education

يحتوي على اسم المادة وتاريخ الاضافه وكود الربط بالجدول الاخر link

post-131439-092904000 1315405653_thumb.j

اريد من الاستعلام ان ياخذ التاريخ مثلا لو نقل التاريخ المدخل لمادة انجليزي هو 1314853200 ويعني 01/09/2011

اذا اصبح التاريخ 04/09/2011 او اكثر اي اكثر من 3 ايام لم يدخل الطالب يظهر الناتج .......

مثال....

محمد لم يدخل الى مادة انجليزي ومادة الانجليزي مضافة من تاريخ 01/09/2011 وتاريخ اليوم هو 07/09/2011 اي انه اكثر من 3 ايام يظهر لي اسم...

محمد-- لم يدخل مادة الانجليزي

مثال اخر

اذا كان محمد لم يدخل اختبار الانجليزي وتاريخ اضافة المادة هو 05/09/2011 واليوم هو 07/09/2011 اي انه يومان ولذلك لايظهر اي نتيجه

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

المرفقات
1.JPG3.JPG

تم تعديل هذه المشاركة بواسطة man in dark في 7 سبتمبر 2011 في 17:30

#2

أخي الغالي أتمنى أن يفيدك الإستعلام التالي ..


$now = easter_date($now);
$q = mysql_query("SELECT students.name, education.education, education.data FROM education INNER JOIN students ON students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while(mysql_fetch_assocc($q)){
//هنا اضف كود للمقارنة بين التاريخ الحالي والتاريخ الذي احضره الإستعلام

}
}
$now = date("Y-M-D");

تم تعديل هذه المشاركة بواسطة La Martir في 7 سبتمبر 2011 في 21:29

#3

مشكور اخي La Martir

انا لو امكنني ان اعرف كيف اعمل مقارنه بين التاريخ المدخل والتاريخ الحالي لفعلت ذلك بدون وضع الموضوع بس لا اعرف

اريد مساعدتكم يا اخوان.....

#4

هذا الكود أخي ان شاء الله ..


$now = easter_date($now);
$q = mysql_query("SELECT students.name, education.education, education.data FROM education INNER JOIN students ON students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while($row=mysql_fetch_assocc($q)){
$ch = $now - $row['education.data'];
if($ch>=3){
echo "Student "."$row['students.name']"."Didn`t access the "."$row['education.education']"." Exam" ;
}

}
}
$now = date("Y-M-D");

تم تعديل هذه المشاركة بواسطة La Martir في 8 سبتمبر 2011 في 04:13

#5

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

Parse error: parse error, unexpected T_ENCAPSED_AND_WHITESPACE, expecting T_STRING or T_VARIABLE or T_NUM_STRING in c:\camel\www\c2\1.php on line 23

الكود

<?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");


$now = date("Y-M-D");
$now  = easter_date($now);
$q = mysql_query("SELECT students.name, education.education, education.data  FROM education INNER JOIN students ON students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while($row=mysql_fetch_assocc($q)){
$ch = $now - $row[education.data];
if($ch>=3){
echo "Student "."$row['students.name']"."Didn`t access the "."$row['education.education']"." Exam" 
}

}
}
?>
#6
if($ch>=3){
$a = $row['students.name'];
$b = $row['education.education'];
echo "Student $a  Didn`t access the $b Exam" ;
}
#7

لايعمل ايضا رساله الخطاء

Warning: easter_date() expects parameter 1 to be long, string given in c:\camel\www\c2\1.php on line 14

Fatal error: Call to undefined function: mysql_fetch_assocc() in c:\camel\www\c2\1.php on line 20

الكود

<?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");


$now = date("Y-M-D");
$now  = easter_date($now);
$q = mysql_query("SELECT students.name, education.education, education.data  FROM education INNER JOIN students ON students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while($row=mysql_fetch_assocc($q)){
$ch = $now - $row[education.data];
if($ch>=3){
$a = $row['students.name'];
$b = $row['education.education'];
echo "Student $a  Didn`t access the $b Exam" ;
}

}
}
?>
#8

اخي الغالي أعتذر فكتبت الكود على عجالة .. لم أنتبه على الأخطاء اإلإملائية

هذا الكود إن شاء يعمل معك أخي الكريم ..

$now = date("Y-m-d");
$now  = easter_date($now);
$q = mysql_query("SELECT students.name, education.education, education.data  FROM education INNER JOIN students ON students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while($row=mysql_fetch_assoc($q)){
$ch = $now - $row['education.data'];
if($ch>=3){
$a = $row['students.name'];
$b = $row['education.education'];
echo "Student $a  Didn`t access the $b Exam" ;
}

المشكلة كانت أخي أنه كان يأخذ التاريخ على أنه سترينغ (شريط محرفي ) .. قمت بهذا التعدي ل. وأخطأت في تهجئة الدالة mysql_fetch_assoc

أرجو المعذرة

أرجو نسخ الكود بعد التعديل

تم تعديل هذه المشاركة بواسطة La Martir في 8 سبتمبر 2011 في 04:42

#9

الله يعطيك العافيه اخي ولكن يظهر الخطاء

Parse error: parse error, unexpected $end in c:\camel\www\c2\1.php on line 27

ولقد عدلت على الكود باضافه رمز الاغلاق في اخر الصفحة {{

الكود

<?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");


$now = date("Y-m-d");
$now  = easter_date($now);
$q = mysql_query("SELECT students.name, education.education, education.data  FROM education INNER JOIN students ON students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while($row=mysql_fetch_assoc($q)){
$ch = $now - $row['education.data'];
if($ch>=3){
$a = $row['students.name'];
$b = $row['education.education'];
echo "Student $a  Didn`t access the $b Exam" ;
}}}
?>

ويظهر الخطاء

Warning: easter_date() expects parameter 1 to be long, string given in c:\camel\www\c2\1.php on line 14

تم تعديل هذه المشاركة بواسطة man in dark في 8 سبتمبر 2011 في 04:49

#10
 <?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");


$now = date("Y-m-d", time());
$q  = mysql_query("SELECT students.name, education.education,  education.data  FROM education INNER JOIN students ON  students.link=education.link ORDER BY education.data DESC ");

$set = mysql_num_rows($q);
if($set>0)
{
while($row=mysql_fetch_assoc($q)){
$ch = abs(strtotime($now) - strtotime($row['education.data']));
$ch = round(((($ch/60)/60)/24), 0);
if($ch>=3){
$a = $row['students.name'];
$b = $row['education.education'];
echo "Student $a  Didn`t access the $b Exam" ;
}
}
}

?>

تم تعديل هذه المشاركة بواسطة La Martir في 8 سبتمبر 2011 في 05:21

#11

الكود الان لايظهر اي ناتج صفحه فارغه

ولقد تاكد من التواريخ المدخله كما في الصورة

post-131439-092904000%201315405653.jpg

التاريخ 1314853200 ويعني 01/09/2011........

#12

تم حل المشكله بس يوجد تعديل اريده عند يتكرر الناتج باسم واحد...

الكود يعمل 100%

$sql="SELECT students.name, education.education FROM students LEFT JOIN education ON 
(students.link <> education.link) 
WHERE education.data < UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 3 DAY ))
ORDER BY students.id";


$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 1315483024_thumb.j

انا اريده اذا كان الاسم واحد "محمد" يجمع اختبارات للطالب "محمد" ويكون الناتج هكذا

عبدالله رياضيات

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

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

محمد رياضيات

محمد انجليزي

المرفقات
4.JPG

تم تعديل هذه المشاركة بواسطة man in dark في 8 سبتمبر 2011 في 14:57

#13

أخي الغالي هل محمد هو طالب واحد فقط أم مجموعة من الطلاب اسمهم محمد ..

أرجو أيضاح هذه النقطة ..

#14

محمد هو طالب واحد

#15

أخي الغالي أرفق لي ملف قاعدة البيانات إذا تكرمت علي ..

#16
-- phpMyAdmin SQL Dump
-- version 2.9.1.1
-- http://www.phpmyadmin.net
-- 
-- المزود: localhost
-- أنشئ في: 08 سبتمبر 2011 الساعة 20:08
-- إصدارة المزود: 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');

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

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

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

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

INSERT INTO `students` (`id`, `name`, `link`) VALUES 
(1, 'محمد', '7'),
(2, 'عبدالله', '8'),
(3, 'محمد', '9');
#17

لماذا لا تقوم بعمل DISTINCT لاستعلامك؟

جرب عمل التالي:

$sql="SELECT DISTINCT students.name, education.education FROM students LEFT JOIN education ON 
(students.link <> education.link) 
WHERE education.data < UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 3 DAY ))
ORDER BY students.id";

طبعاً DISTINCT مهمتها تجاهل أي تكرار في السجلات! أي عرض كل سجل لمرة واحد حتى وإن كان مكرر

لكن في طلبك قمت بتجاهل السجلات الغير مكررة فهل تريد ذلك فعلاً؟

Everything will be fine when we TALK LESS, DO MORE


#18

اخي MoHaMMaD Pro الاستعلام DISTINCT لايحسب ان الطالب محمد واحد ولقد جربت الكود...

يظهر الناتج هكذا.....

محمد القران الكريم

محمد انجليزي

محمد رياضيات

عبدالله رياضيات

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

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

محمد فيزياء

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

عبدالله رياضيات

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

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

محمد رياضيات

محمد انجليزي

#19

كنت متوقعاً لنتيجة الـ DISTINCT لذلك كتبت لك السؤال الأخير في ردي

اقتباس

لكن في طلبك قمت بتجاهل السجلات الغير مكررة فهل تريد ذلك فعلاً؟

لا أدري, ولكن كيف ترى أن بتجاهل السجلات الغير مكررة سيتحول محمد إلى طالب واحد, بينما حين تظهر السجلات الغير مكررة وتظهر السجلات المكررة لمرة واحدة يعتبر محمد أكثر من طالب واحد؟

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

Everything will be fine when we TALK LESS, DO MORE


#20

اخي MoHaMMaD Pro الله يعطيك العافيه....

كيف يمكن عمل هذا الاستعلام بحيث يحسب ان محمد طالب واحد ويظهر لي جميع المواد التي لم يختبرها محمد

انا مشكلتي في الاستعلام هذا ....هل هنالك طريقه اخرى او اضيف حقول اخرى على الجدولين لتحقق هذا الاستعلام

#21

مالم استطع فهمه في طلبك أخي

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

ببساطة, في حال كان هناك اسم طالب مكرر وتكررت المواد المرتبطة باسم هذا الطالب تريد أن تعرض فقط المواد المكررة؟ ولا تريد عرض المواد الغير مكررة؟

تم تعديل هذه المشاركة بواسطة MoHaMMaD Pro في 9 سبتمبر 2011 في 20:21

Everything will be fine when we TALK LESS, DO MORE


#22

اخي MoHaMMaD Pro اظن انك لم تصل المعلومه لك بشكل صحيح

ناخذ مثال على اسمك MoHaMMaD Pro......قاعدة البيانات!

جدول اسماء الطلاب...students

post-131439-088653000 1315647860_thumb.j

جدول المواد....education

post-131439-031760400 1315647933_thumb.j

الان اخي اسمك MoHaMMaD Pro كم اختبار اختبرت...

كما هو موضح امام اسمك في الحقل link ارقام 7-9 وبالربط بجدول education للحقل link نلاحظ انك اختبرات المواد.....

فيزياء

القران الكريم

بهذا الناتج هذا الاستعلام يظهر جميع المواد التي اختبرتها اخي MoHaMMaD Pro

$sql="SELECT students.name, education.education FROM students LEFT JOIN education ON 
(students.link = education.link) 
WHERE education.data < UNIX_TIMESTAMP(DATE_SUB(CURDATE(),INTERVAL 3 DAY ))
ORDER BY students.name";

..........

طيب ماهي المواد التي لم تختبرها......

رياضيات

انجليزي

انا اريد هذا الناتج المواد التي لم تختبرها..........

رياضيات

انجليزي

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

المرفقات
1.JPG2.JPG

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

#23

اتفضل ولو اني ما اشتغلت قواعد بيانات من فترة والمثال جربته على sqlite

تفضل

select studentExamed.name ,education.name  from studentExamed , education where education.id not in (
select education.id  from studentExamed )  and  studentExamed.name = 'محمد'  ;

او كالتالي بالاسماء التي اخترتها انت للجداول والاحقول

select students.name ,education.education from students , education where education.id not in (
select education.id  from studentExamed )  and  students.name = 'محمد'  ;

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

#24

اخي لقد استخدمت الكود ولكن يظهر لي الصفحه بدون نتائج فارغه بدون اظهار اي اخطاء

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

<?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 from students , education where education.id not in (
select education.id  from students )  and  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
} 

?>
#25

معليش عزيزي فيه اخطاء في اسماء الحقول والاسلوب جرب

عذرا ً

select students.name ,GROUP_CONCAT ( education.education)  from students , education  where students.link <>education.id  group by  students.name;

other ESTJ thing

اقتباس
Help Me To Help You

0xBAD00DAD.png

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

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

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

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

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