سؤال
في صفحة واحدة ، يجب أن تعرض السجلات التي تحتوي على الشهر المحدد التالي من القائمة المنسدلة ويتم تعيينها في الشهر = مارس
لذا فإن الاستعلام سيفعل هذا
$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)