سؤال

في صفحة واحدة ، يجب أن تعرض السجلات التي تحتوي على الشهر المحدد التالي من القائمة المنسدلة ويتم تعيينها في الشهر = مارس

لذا فإن الاستعلام سيفعل هذا

$sql = "SELECT * FROM schedule WHERE month = '" . Clean($_GET['month']) . "' AND finished='0' ORDER BY date ASC";

لكنه يعرض السجلات التي لها قيمة 2 في العمود النهائي ولا أريد أن يتضمن الاستعلام هذا.

لقد حاولت

$sql = "SELECT * FROM schedule WHERE month = '" . Clean($_GET['month']) . "' AND finished='0' OR finished = '1' OR finished = '3' ORDER BY date ASC";

لكنه يعرض سجلات في أشهر مختلفة عندما لا يكون ذلك.

لذا أريد السجل في الأساس استبعاد السجلات التي لها قيمة 2 في السجل الذي لن يتم عرضه في الصفحة.

هل كانت مفيدة؟

المحلول

يجب أن يفعل استفسارك الأول ما تريد. صفوف مع finished = '2' لا ينبغي إرجاعها.

تجاهل أن هناك خطأ في استفسارك الثاني ربما يجب عليك إصلاحه:

$sql = "SELECT * FROM schedule WHERE month = '" . Clean($_GET['month']) .
       "' AND (finished='0' OR finished = '1' OR finished = '3') ORDER BY date ASC";

الفرق هو أقواس حول أو الجمل لأنه ويرتبط بقوة أكبر من أو.

يمكنك أيضًا تحقيق نفس النتيجة بشكل أكثر دقة باستخدام IN:

$sql = "SELECT * FROM schedule WHERE month = '" . Clean($_GET['month']) .
       "' AND finished IN ('0', '1', '3') ORDER BY date ASC";

نصائح أخرى

AND finished='0' OR finished = '1' OR finished = '3'

إلى

AND finished != 2

أو

AND (finished = 0 OR finished = 1 OR finished = 3)

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top