简体   繁体   English

MySQL查询条件条件与或在PHP

[英]Mysql query where condition with or in php

Hi all i am trying to fetch duedate for particular course when i assigned a course so i have 3 types of table where i can assign course to user in those 3 tables i have userid column same so in my course table it has to satisfy the condition but its not working nw if i gave only one condition is working 大家好,我在尝试分配课程时试图获取特定课程的截止日期,所以我有3种类型的表,我可以在这3个表中为用户分配课程,我具有userid列,因此在我的课程表中它必须满足条件但是如果我只给出一个条件,它就不能正常工作

Here is my query: 这是我的查询:

 $sql1="SELECT cm.id as cmid,c.id as cid,c.fullname,c.startdate,c.timecreated,c.theme,cm.instance,asg.duedate,asd.duedate,sca.duedate FROM mdl_course c LEFT JOIN mdl_course_modules cm ON c.id=cm.course LEFT JOIN mdl_ppc_assigncourses_group asg On asg.courseid=c.id LEFT JOIN mdl_ppc_assigncourses_dep asd On asd.courseid=c.id LEFT JOIN mdl_ppc_singlecourse_assign sca On sca.courseid=c.id where c.category != 0 and requested='0' AND cm.id!='' AND asg.userid='2101'  and sca.userid= '2101' and asd.userid= '2101' GROUP BY cm.id HAVING COUNT(*) > 0";

In that query if i keep only one condition like this where c.category != 0 and requested='0' AND cm.id!='' AND asg.userid='2101' it is fetching one course i have course form asg.userid also so if i add it its not working 在该查询中,如果我仅保留这样一种条件where c.category != 0 and requested='0' AND cm.id!='' AND asg.userid='2101'则正在获取一门课程,我具有课程形式asg .userid也因此,如果我添加它不起作用

And i am trying to get the duedates for that particular course but for first course i am getting due date as correct for second one duedate is showing as default date(1970-01-01) 我正在尝试获取该特定课程的截止日期,但对于第一门课程,我得到的截止日期对于第二个截止日期是正确的,显示为默认日期(1970-01-01)

Here ia my code: 这是我的代码:

 <?php
            require_once($CFG->dirroot . '/mod/scorm/lib.php');
            require_once($CFG->dirroot . '/mod/scorm/locallib.php');
            require_once($CFG->dirroot . '/course/lib.php');
            global $DB;
            $id = $USER->id;

            $stmt = $DB->get_records_sql("
                         SELECT asg.asgid,asg.courseid,asg.groupid,asg.duedate FROM mdl_ppc_assigncourses_group asg 
                         JOIN mdl_ppc_group_users pgu ON asg.groupid = pgu.group_id
                         WHERE pgu.userid = '$id' AND asg.status='1'and  pgu.status='1'
                          UNION  SELECT asd.acdid,asd.courseid,asd.depid,asd.duedate FROM mdl_ppc_assigncourses_dep asd 
                         JOIN mdl_ppc_dep_user pdu ON asd.depid = pdu.department 
                         WHERE pdu.userid = '$id' AND asd.status='1' and pdu.status='1'
                         UNION SELECT mpsa.scid,mpsa.courseid,mpsa.depid,mpsa.duedate FROM mdl_ppc_singlecourse_assign mpsa LEFT JOIN mdl_course c ON mpsa.courseid=c.id where mpsa.userid = '$id' and mpsa.status='1'");


            $cids = '';
            foreach ($stmt as $value) {
                $cids[] = $value->courseid;

            }
            //print_r($cids);

           $sql1="SELECT cm.id as cmid,c.id as cid,c.fullname,c.startdate ,c.timecreated ,c.theme ,cm.instance,asg.duedate ,asd.duedate ,sca.duedate 
    FROM mdl_course c 
    LEFT JOIN mdl_course_modules cm ON c.id=cm.course  AND cm.id!=''
    LEFT JOIN mdl_ppc_assigncourses_group asg On asg.courseid=c.id  AND asg.userid='2101'
    LEFT JOIN mdl_ppc_assigncourses_dep asd On asd.courseid=c.id and asd.userid= '2101' 
    LEFT JOIN mdl_ppc_singlecourse_assign sca On sca.courseid=c.id  and sca.userid= '2101'
    where c.category != 0 and requested='0' 
    GROUP BY cm.id 
    HAVING COUNT(*) > 0";
            if ($cids != '') {
                $cids = implode(',', $cids);
                $sql1 .= " and cid in ($cids)";
            }

            $courses = $DB->get_records_sql($sql1);

            if (sizeof($courses) && $cids != '') {
                foreach ($courses as $row) {
                          echo $row->duedate;

                }
            }

Can anyone help me how can i solve it 谁能帮我解决

Thanks in advance. 提前致谢。

if you use where clause for filter left join tables columns this work as inner join .. 如果将where子句用于过滤左连接表列,则此操作将作为内部连接..

you should move these condition in related left join on clause 您应该在相关的左联接on子句中移动这些条件

$sql1="SELECT cm.id as cmid
        ,c.id as cid
        ,c.fullname
        ,c.startdate
        ,c.timecreated
        ,c.theme
        ,cm.instance
        ,asg.duedate
        ,asd.duedate
        ,sca.duedate 
        FROM mdl_course c 
        LEFT JOIN mdl_course_modules cm ON c.id=cm.course  AND cm.id!=''
        LEFT JOIN mdl_ppc_assigncourses_group asg On asg.courseid=c.id  AND asg.userid='2101'
        LEFT JOIN mdl_ppc_assigncourses_dep asd On asd.courseid=c.id and asd.userid= '2101' 
        LEFT JOIN mdl_ppc_singlecourse_assign sca On sca.courseid=c.id  and sca.userid= '2101
        where c.category != 0 and requested='0' ' 
        GROUP BY cm.id 
        HAVING COUNT(*) > 0";

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM