2012-09-12 37 views
0

我有以下SQL查詢數據庫並從4個不同的表中提取信息。php mysql將可能的空值加入4個表

SELECT d.item AS day, m.item as month, y.item as yr, l.item as local 
FROM date_day d 
JOIN date_month m ON d.recid=m.recid 
JOIN date_year y ON d.recid=y.recid 
JOIN location l ON d.recid=l.recid 
WHERE d.recid='cneta0ld00s6' 

其中可能有一個或多個表可能爲空並且不包含值。特別是在日期字段。上述任何一項是空的還是不存在的,都會導致整個項目失敗?我特別擔心date_day,因爲我知道mysql沒有FUll JOIN。

有什麼想法?

+0

是'location'這個表總是有記錄,然後'date'表可能是空的? – Taryn

+0

不幸的是,每個人可能是空的或失蹤。其關於歷史照片的數據,所以日期,月份,年份或位置可能不會被填寫數據的人所知。我不幸的是堅持一個非常糟糕的數據庫結構。我想知道是否更容易做4個單獨的選擇並將結果加載到數組中! –

回答

1

我認爲:

SELECT d.item AS day, m.item as month, y.item as yr, l.item as local 
FROM date_day d 
LEFT JOIN date_month m ON d.recid=m.recid 
LEFT JOIN date_year y ON d.recid=y.recid 
LEFT JOIN location l ON d.recid=l.recid 
WHERE d.recid='cneta0ld00s6' 

會做你想讓它什麼

+0

雖然我很確定,那預計date_day表包含recid的列,就像我的單連接一樣。 –

1

爲了確保我總是有距離,即使其空,我在不同的表添加爲表中的數據主表,其中一個將始終包括recid,表是照片。這樣我確保查詢總是會返回一些東西,即使它有很多的空值。這意味着我也可以使用左連接。

SELECT p.photo_file, d.item AS day, m.item as month, y.item as yr, l.item as local 
    FROM photo p 
LEFT JOIN date_day d ON p.recid=d.recid 
LEFT JOIN date_month m ON p.recid=m.recid 
LEFT JOIN date_year y ON p.recid=y.recid 
LEFT JOIN location l ON p.recid=l.recid 
WHERE p.recid='paul'