2011-05-04 61 views
0

我正在構建每日通知電子郵件腳本。正確加入發送每日通知電子郵件(PHP,Mysql)

我需要將4個表連接到用戶表,並且我需要每個while ($user = mysql_fetch_array($result)){語句中的user_email。

我能夠得到這個與一個表的外連接一起工作,但是我在第一個表連接結束後沒有得到執行帶有不同表的目標的語法的語法。我希望mysql查詢抓取內容,直到第一個連接用完(對於每個用戶),然後開始顯示第二個連接查詢的數據(全部在while循環中執行)。這是可能的,如果是這樣,語法是什麼?

現有代碼:

$sql = "SELECT * 
      FROM users 
    OUTER JOIN contest_entries ON contest_entries.email = users.email ";  

$result = mysql_query($sql) or die (mysql_error()); 

我要附加越來越所有新的比賽的第二個查詢。

$sql = "SELECT * 
      FROM contests"; 

所以對於每一個用戶,我希望顯示每一個contest_entries領域是適用於他們,然後每場contests是適用於他們。

注意:爲了節省處理能力/時間,我可能會將所有比賽存儲在一個字符串中,然後將它們添加到每封電子郵件中,但我想用這個例子來找到正確的多重連接技術。

+0

的是'LEFT OUTER JOIN'和'RIGHT OUTER JOIN'在SQL。但不(僅)'外部連接'。 – 2011-05-04 15:24:36

+0

@Bob:你不假設有人會猜測你的4表結構是什麼,對吧? – 2011-05-04 15:33:33

+0

我認爲stackoverflow用戶是很好的猜測者。但是,真的,我真的想看到這三個例子,所以我有一個想法如何將它應用到其餘的表格。 – 2011-05-04 15:36:48

回答

2
$sql = "SELECT * 
     FROM users 
      LEFT JOIN contest_entries 
      ON contest_entries.email = users.email 
      JOIN contests 
      ON contests.id = contest_entries.contestid 
     ORDER BY users.email     --- or whatever other order you need 
       , contest.id ";  

然後,您可以在PHP中遍歷用戶和競賽已經排序(和分組)的結果集。


如果你還沒有(還)沒有辦法涉及userscontests,我想你還是設計應用程序和數據庫結構。您可以使用它來顯示相關的所有比賽的用戶,然後嘗試在WHERE子句中使用條件:

$sql = "SELECT * 

     FROM users 
      LEFT JOIN contest_entries 
      ON contest_entries.email = users.email 
      CROSS JOIN contests 

     WHERE (contests.started >= NOW() - interval 3 day) --- new contests 
      AND (users.age <= contests.agelimit)    
      AND (some other condition)       

     ORDER BY users.email     --- or whatever other order you need 
       , contest.id " ;  
+0

嘿 - 幾乎在那裏,除了沒有加入比賽的關鍵,我們正在獲得所有比賽 – 2011-05-04 15:45:36

+0

那麼,我不能再猜測了。張貼表格和他們的領域,我們可以建議添加或改變結構在'比賽'和'contest_enties'中應該有一個共同的字段,所以這兩個表可以在查詢中相關聯 – 2011-05-04 15:50:36

+0

這種連接語法限制比賽,它應該加入所有比賽 - 可能連接不正確的語法? – 2011-05-04 16:11:08