2012-10-16 124 views
0

我有兩個表(claim_pics & claiminfo)我正在查詢結果頁面。左連接只返回如果匹配

它的工作很好..當有兩個表的匹配claim_id(claiminfo.claim_id = claim_pics.claim_id)。

但是,當那裏只有一個表與claim_id(即聲明信息),而不是匹配的claim_id時,該行的所有屬性都顯示出來,除了claim_id。

沒有claim_id,所以如果用戶點擊編輯按鈕,沒有claim_id來告訴它去哪裏。

我需要它呈現claim_id的$結果,無論是否存在匹配。任何想法或解決辦法?

謝謝。

$query = "SELECT * FROM claiminfo 
          LEFT JOIN (claim_pics) 
          ON (claiminfo.claim_id = claim_pics.claim_id) 
      WHERE(userid='$userid') 
      ORDER BY claiminfo.ts 
      DESC LIMIT 200"; 

//只會返回

claim_ids這兩個圖片和信息匹配

    $result = mysql_query($query); 

        while($row = mysql_fetch_assoc($result)) { 


            $namelocation =  $row['namelocation']; 
            $claimholder = $row['claimholder']; 
            $occasion =  $row['occasion']; 
            $geotag = $row['geotag']; 
            $lat = $row['lat'] ; 
            $lng = $row['lng']; 
            $claim_id = $row['claim_id']; 
            $img = $row['location']; 




            $html = " ... " 
+3

請不要泄露。 Shift鍵存在,因爲正確的外殼使文本更容易閱讀,而SHOUTING令人討厭。 –

+1

我認爲這是因爲*正在拾取claim_pics表的clam_id而不是您的claiminfo表。 –

+0

我敢打賭,你的限制條款顯示似乎只是'claiminfo.claim_id = claim_pics.claim_id' - 試着返回所有的行,看看你是否在右側獲得NULLs –

回答

0

正如評論所指出的,很可能是從空claim_pics行空claim_id被消隱$row['claim_id']。要解決這個問題,最簡單的辦法是明確選擇和別名claiminfo.claim_id

$query = "SELECT *, claiminfo.claim_id AS id FROM claiminfo 
          LEFT JOIN (claim_pics) 
          ON (claiminfo.claim_id = claim_pics.claim_id) 
      WHERE(userid='$userid') 
      ORDER BY claiminfo.ts 
      DESC LIMIT 200"; 

然後,您可以可靠地獲得與可變$row['id']的claim_id。

在更一般的說明中,這種情況說明了爲什麼它通常更好not to use SELECT *

+0

試過了,它沒有返回任何東西。多選的語法是否正確,意思是逗號? –

+0

糟糕,在指定行時必須先執行星號。修正了我的答案。 –

+0

解決。謝謝! –