2016-05-29 90 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