2016-05-29 58 views
-1
$numQuery1 = " 
SELECT d.* 
    , r.* 
    , AVG(c.on_time)+AVG(c.friendly)+AVG(c.language_skills)+AVG(c.professional) ranking 
    FROM comment c 
    LEFT 
    JOIN driver d 
    ON d.userid = c.driver_id 
    LEFT 
    JOIN driver_rental r 
    ON r.email = d.email 
WHERE 
    ( 
     $driver_rental IS NOT NULL 
    AND $driver_rental != '' 
    AND car_type_1 >= $_SESSION[car_type_1] 
    ) 
    OR car_type_2>=$_SESSION[car_type_1]); 
"; 

如果评语表有没有driver_id记录,结果是空的,我可以忽略评语表,但在select语句不能没有它?MySQL的加入三表,如果一个表中没有记录

+0

推测car_type_1来自司机租赁表? (如果你在查询中明确指出这种情况,那么这很有用) – Strawberry

回答

0
$numQuery1 = "SELECT driver.*, driver_rental.*, avg(comment.on_time)+avg(comment.friendly)+avg(comment.language_skills)+avg(comment.professional) as ranking 
    FROM comment 
    LEFT JOIN driver 
    ON 
    driver.userid = comment.driver_id 
    RIGHT JOIN driver_rental 
    ON 
    driver.email = driver_rental.email 
    WHERE 
    ($driver_rental IS NOT NULL AND $driver_rental != '') AND (car_type_1>=$_SESSION[car_type_1] OR car_type_2>=$_SESSION[car_type_1])"; 

这个想法是不强调任何连接的驱动程序表。 SO而不是第二个左加入使用权加入与driver_rental

+0

在我的案例中,driver.userid = comment.driver_id没有记录,但是搜索结果希望包含注释表。 – kenleung

+0

这就是为什么左连接已被使用,以便如果在驱动程序表中没有记录,仍将使用来自评论表的所有记录。但使用第二个连接不应该离开而是正确连接。 – Aditya

+0

呃,没有人使用RIGHT JOIN。你能以另一种方式解决吗? – Strawberry