2011-05-23 201 views
0

請有人可以幫我用這個sql語句。我有一個表如下Mysql多表查詢語句

Ads Table 
user_id ad_id title    message repost_days_id repost_times_id 
    1  1  Message Title 1 Message 1    1 
    1  1  Message Title 2 Message 0    0 

Repost Days Table: 
repost_days_id Value 
1    5 

Repost Times Table: 
Repost_times_id value 
1     10 

現在我要查詢的廣告表格,以示與廣告標題廣告信息重新發布日期和重新發布時間顯示廣告。例如,對於廣告1,它將是

Message Title 1 
Message Repost Days=10 
Repost Times=5. 

如何爲此編寫sql語句。這是我所做的,並沒有顯示任何結果。

$q = " 
select 
    a.ad_id, 
    a.title, 
    a.message, 
    rt.value, 
    rd.value, 
from 
    ad_repost_times rt, 
    ad_repost_days rd, 
    ads a 
where 
    a.user_id='{$_SESSION['user_id']}' 
and rt.repost_times_id=a.repost_times_id 
and rd.repost_days_id=a.repost_days_id 
"; 
+0

你可以發現在轉播日和轉播時間的表,還有價值0.1沒有ID,但在廣告表格,無論是repost_days_id和repost_times_id已經被設置爲默認值爲0。你認爲這會影響查詢。 – stanley 2011-05-23 13:52:46

回答

0

此查詢是否執行無誤?

從你的表結構似乎廣告表沒有現場user_id和您要查詢就可以了

1

查詢無法滿足a.user_id='{$_SESSION['user_id']}'條件,因爲你必須在ads表中沒有user_id場。

+0

我忽略了user_id字段。它在表 – stanley 2011-05-23 13:46:07

1
  1. 看起來您在字段列表末尾有一個額外的逗號。這首先會導致執行查詢的問題。在嘗試運行查詢以提醒您問題後,請確保您正在檢查錯誤。

  2. 您的a.user_id='{$_SESSION['user_id']}'表示當您在SQL查詢中提交時,您的用戶標識將會出現大括號。如果$_SESSION['user_id']保存整數1234,那麼您的查詢將看起來像a.user_id='{1234}'。 (請注意,如果您在整個代碼中發生相同的錯誤,則此「錯誤」實際上可能不是問題的原因。)

  3. 以下內容不是問題的直接原因,但它對於安全原因,它會避免#2中的問題:您需要需要刪除變量替換a.user_id='{$_SESSION['user_id']}',並將其更改爲與a.user_id=?綁定的參數以避免SQL注入攻擊(並且巧合地消除了導致錯誤的問題# 2)。

  4. 要在repost_days_id處理的默認值零,repost_times_id您需要使用LEFT JOIN,像這樣:

    $q = " 
    select 
        a.ad_id, 
        a.title, 
        a.message, 
        rt.value, 
        rd.value 
    from 
        ads a 
        LEFT JOIN ad_repost_times rt ON rt.repost_times_id=a.repost_times_id 
        LEFT JOIN ad_repost_days rd ON rd.repost_days_id=a.repost_days_id 
    where 
        a.user_id='{$_SESSION['user_id']}' 
    "; 
    

    rt.valuerd.value的結果將是空的有0對行ID。

    請注意,我已經重新排序表(ads a需要是第一位的,否則你需要使用在某些地方代替LEFT JOINRIGHT JOIN),而應該不再是表名之間的逗號。 (LEFT JOIN替換爲的逗號)。

+0

你好肯,感謝您的反饋。我在最後一個字段查詢中刪除了多餘的逗號,現在顯示結果。但是,它並未顯示repost_days_id和repost_times_id已設置爲默認值0的表的結果。由於各個轉發日和轉發時間表中沒有0值。我如何解決這個問題。我不想在這些表中添加0。 – stanley 2011-05-23 14:49:13

+0

我要編輯我的答案來討論這個問題。 – 2011-05-23 16:14:17

+0

非常感謝。你的解釋真的幫助了我。我如何實現這個「你需要刪除變量替換a.user_id ='{$ _ SESSION ['user_id']}',並將其改爲與a.user_id =?綁定的參數」 – stanley 2011-05-23 18:03:21