简体   繁体   中英

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

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

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)

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 ..

you should move these condition in related left join on clause

$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";

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

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