اذهب إلى المحتوى
  • 0

كتابة استعلام في PHP للاستعلام عن الطلاب الذين يحملون مواد محددة دون غيرها

عبدالله العبدالله

السؤال

السلام عليكم 

لدي الكود يعمل ولكن عند اضافة NOT IN  لايقوم بالاستعلام حيث يستعلم AND ramz IN  واريد المساعده في طريقه استبعاد تحقق معين

  AND ramz IN ( 'داعم - 221', 'انجل - 204', 'داعم - 151','اسلم - 101','شبكا - 121') بعض الطلاب لديهم انجل-103 ويقوم بضمهم للاستعلام وانا اريد فقط الطلاب الذين لديهم داعم -221 وانجل204 الخ... حيث اضيف محدد اخر يقوم باستعلام عن طلاب لديهم هذا المواد فقط

بشكل اوضح اريد الاستعلام عن طلاب لديهم هذه المواد فقط وهي داعم221 وانجل204 وداعم 151 واسلم101 وشكبا121 فقط غير ذلك يقوم باستبعادهم حتى لوكان لديهم نفس المواد المذكورة مع مواد اخرى

الكود التالي يعمل فقط على استعلام اي طالب لديهم هذه المواد

<link rel="stylesheet" href="main.css">

<?php
$host="localhost";
$user="root";
$pass="";
$db="res";
$con=mysqli_connect($host,$user,$pass,$db);
?>
<div align='center'>
  <form action='' method='post'>

    <input class="button"type='submit' name='btn_search' value='مستوى رابع دعم فني  '>
    <br><br>
    <button class="button" onclick="myfunction()">تصدير </button>
    <br><br>
    <a href="main.html" class="button">الرئــيـــســيــة</a>
    <br><br>
  </form>
  <?php
  if (isset($_POST["btn_search"])) {
  ?>
  <table border='5'>
    <tr>
      <th>رقم المتدرب </th>
      <th>اسم المتدرب</th>
      <th>التخصص  </th>
      <th>المعدل </th>

    </tr>

    </tr>
    <?php

    $sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa FROM `tr1`
                            WHERE id_trainee LIKE '%4432%'
                            AND ramz IN ( 'داعم - 221', 'انجل - 204', 'داعم - 151','اسلم - 101','شبكا - 121') AND ramz NOT IN('حاسب - 102', 'انجل - 102', 'انجل - 101','حاسب - 101','حاسب - 121')// هذه المواد عند الطالب يتم استبعاده
                            GROUP BY id_trainee
                            HAVING COUNT(DISTINCT ramz) = 5");
    while($row = mysqli_fetch_array($sh)){
    ?>
    <tr>
      <td> <?php echo $row['id_trainee']?></td>
      <td> <?php echo $row['name']?></td>
      <td> <?php echo $row['specialty']?></td>
      <td> <?php echo $row['gpa']?></td>


    </tr>
    <?php
    }
    }
    ?>
  </table>
</div>

 

تم التعديل في بواسطة Mustafa Suleiman
تعديل عنوان السؤال
رابط هذا التعليق
شارك على الشبكات الإجتماعية

Recommended Posts

  • 0

حاول الإعتماد على عبارة NOT IN لاستبعاد الطلاب الذين يحتوون على مواد معينة، ولكن يجب عليك تكوين الاستعلام بشكل صحيح،

فأنت تستخدم IN لتحديد مجموعة من المواد المطلوبة، و NOT IN لاستبعاد مجموعة من المواد، لذا عليك استخدام AND لربط الشروط بشكل صحيح كالتالي:

$sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa FROM `tr1`
                        WHERE id_trainee LIKE '%4432%'
                        AND ramz IN ('داعم - 221', 'انجل - 204', 'داعم - 151', 'اسلم - 101', 'شبكا - 121')
                        AND ramz NOT IN ('حاسب - 102', 'انجل - 102', 'انجل - 101', 'حاسب - 101', 'حاسب - 121')
                        GROUP BY id_trainee
                        HAVING COUNT(DISTINCT ramz) = 5");

تأكد من وضع AND بين شروط الـ IN و NOT IN.

تستطيع أيضًا استخدام تعبيرات LIKE لإنشاء استعلام أكثر فاعلية، لاستبعاد الطلاب الذين لديهم أيًا من المواد التالية:

SELECT id_trainee, name, specialty, gpa
FROM `tr1`
WHERE id_trainee LIKE '%4432%'
AND (ramz LIKE '%داعم - 221%' OR ramz LIKE '%انجل - 204%' OR ramz LIKE '%داعم - 151%' OR ramz LIKE '%اسلم - 101%' OR ramz LIKE '%شبكا - 121%')
AND NOT (ramz LIKE '%حاسب - 102%' OR ramz LIKE '%انجل - 102%' OR ramz LIKE '%انجل - 101%' OR ramz LIKE '%حاسب - 101%' OR ramz LIKE '%حاسب - 121%')
GROUP BY id_trainee
HAVING COUNT(DISTINCT ramz) = 5;

ونتيجة الاستعلام هي نفسها مثل السابق، ولكنه يستخدم تعبيرات LIKE بدلاً من تعبيرات IN.

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0
بتاريخ On 17‏/11‏/2023 at 16:50 قال Mustafa Suleiman:

حاول الإعتماد على عبارة NOT IN لاستبعاد الطلاب الذين يحتوون على مواد معينة، ولكن يجب عليك تكوين الاستعلام بشكل صحيح،

فأنت تستخدم IN لتحديد مجموعة من المواد المطلوبة، و NOT IN لاستبعاد مجموعة من المواد، لذا عليك استخدام AND لربط الشروط بشكل صحيح كالتالي:

$sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa FROM `tr1`
                        WHERE id_trainee LIKE '%4432%'
                        AND ramz IN ('داعم - 221', 'انجل - 204', 'داعم - 151', 'اسلم - 101', 'شبكا - 121')
                        AND ramz NOT IN ('حاسب - 102', 'انجل - 102', 'انجل - 101', 'حاسب - 101', 'حاسب - 121')
                        GROUP BY id_trainee
                        HAVING COUNT(DISTINCT ramz) = 5");

تأكد من وضع AND بين شروط الـ IN و NOT IN.

تستطيع أيضًا استخدام تعبيرات LIKE لإنشاء استعلام أكثر فاعلية، لاستبعاد الطلاب الذين لديهم أيًا من المواد التالية:

SELECT id_trainee, name, specialty, gpa
FROM `tr1`
WHERE id_trainee LIKE '%4432%'
AND (ramz LIKE '%داعم - 221%' OR ramz LIKE '%انجل - 204%' OR ramz LIKE '%داعم - 151%' OR ramz LIKE '%اسلم - 101%' OR ramz LIKE '%شبكا - 121%')
AND NOT (ramz LIKE '%حاسب - 102%' OR ramz LIKE '%انجل - 102%' OR ramz LIKE '%انجل - 101%' OR ramz LIKE '%حاسب - 101%' OR ramz LIKE '%حاسب - 121%')
GROUP BY id_trainee
HAVING COUNT(DISTINCT ramz) = 5;

ونتيجة الاستعلام هي نفسها مثل السابق، ولكنه يستخدم تعبيرات LIKE بدلاً من تعبيرات IN.

اشكرك على الرد شكر كبير ولكن لم يقم باستبعاد الطلاب الذين لديهم المواد في AND ramz NOT IN حاسب-121 وحاسب-101 الخ.. اريد ان يستبعد اي طالب لديه مواد المذكورة في AND ramz NOT IN  حيث قام بالاستعلام على الطلاب الذين لديهم المواد المذكوره في AND ramz IN() ولم يستبعد الطلاب الذين في   AND ramz NOT IN ()

 

<?php
                            $sh=mysqli_query($con, "SELECT id_trainee, name, specialty, gpa FROM `tr1`
                          WHERE id_trainee LIKE '%4441%'
                          AND ramz IN ( 'حاسب - 121', 'انجل - 102', 'حاسب - 102','اسلم - 101','برمج - 101')
                          AND ramz NOT IN ('انجل - 101')
                          GROUP BY id_trainee
                            HAVING COUNT(DISTINCT ramz) = 5");

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

  • 0

اذا كنت تريد ذكر المواد الاخرى في الاستعلام ستكون التعليمة كالتالي 
 

SELECT id_trainee, name, specialty, gpa 
FROM `tr1`
WHERE id_trainee LIKE '%4432%'
AND ramz IN ('داعم - 221', 'انجل - 204', 'داعم - 151', 'اسلم - 101', 'شبكا - 121')
AND id_trainee NOT IN (
    SELECT id_trainee 
    FROM `tr1` 
    WHERE ramz NOT IN('داعم - 221', 'انجل - 204', 'داعم - 151', 'اسلم - 101', 'شبكا - 121')
)
GROUP BY id_trainee
HAVING COUNT(DISTINCT ramz) = 5;

اما اذا كان عدد المواد كبير فليس من الجيد كتابة المواد في التعليمة :
 

SELECT id_trainee, name, specialty, gpa
FROM `tr1`
WHERE id_trainee LIKE '%4432%'
GROUP BY id_trainee
HAVING SUM(CASE WHEN ramz NOT IN ('داعم - 221', 'انجل - 204', 'داعم - 151', 'اسلم - 101', 'شبكا - 121') THEN 1 ELSE 0 END) = 0
AND COUNT(DISTINCT ramz) = 5;

 

رابط هذا التعليق
شارك على الشبكات الإجتماعية

انضم إلى النقاش

يمكنك أن تنشر الآن وتسجل لاحقًا. إذا كان لديك حساب، فسجل الدخول الآن لتنشر باسم حسابك.

زائر
أجب على هذا السؤال...

×   لقد أضفت محتوى بخط أو تنسيق مختلف.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   جرى استعادة المحتوى السابق..   امسح المحرر

×   You cannot paste images directly. Upload or insert images from URL.

  • إعلانات

  • تابعنا على



×
×
  • أضف...