2011-12-22 40 views
0

我需要查詢兩個新表$ $ res_info和$ res_text ...我如何將所有3個查詢合併爲一個。第一個查詢$ res抓取所有內容包括在另外兩個表中使用的唯一字段m_id。這可以通過UNION完成嗎?將3個mysql查詢合併到1中

$res = @mysql_query("SELECT *, DATE_FORMAT(m_lld,'%m/%d/%y') 
        AS m_lld_formatted 
        FROM social_members 
        WHERE m_user='$en[user]'"); 

if (@mysql_num_rows($res) == 0) call404(); 
$line = @mysql_fetch_assoc($res); 
foreach ($line as $key => $value) 
     $en['m'.$key] = str_replace("\n",'<br/>',stripslashes($value)); 

$res_info = mysql_query("SELECT *, 
          FROM social_meminfo 
          WHERE m_id = '".$en['mm_id']."'"); 
$res_text = mysql_query("SELECT *, 
          FROM social_memtext 
          WHERE m_id = '".$en['mm_id']."'"); 
+1

表格之間的關係如何?所有一對一? – 2011-12-22 07:57:42

+1

你不能在密鑰'm_id'的3個表上使用簡單的連接嗎? – anubhava 2011-12-22 07:57:57

+0

@anubhava查詢1需要先使用m_user才能獲得m_id ...我將如何去加入它們? – acctman 2011-12-22 12:23:39

回答

1

根據您的意見,我認爲你正在尋找一個OUTER JOIN,另一個INNER JOIN這樣的:

SELECT sm.*, DATE_FORMAT(sm.m_lld,'%m/%d/%y') AS m_lld_formatted 
FROM social_members sm 
LEFT OUTER JOIN social_memtext smt ON (sm.m_id = smt.m_id) 
JOIN social_meminfo smi ON (sm.m_id = smi.m_id) 
WHERE sm.m_user = "$en['user']" 

LEFT OUTER JOIN當表social_memtext確實有匹配的條目會照顧的情況。

+0

如果正在訪問大量配置文件,則LEFT OUTER JOIN比LEFT JOIN的性能要好嗎? – acctman 2011-12-23 03:10:32

+1

我使用了'LEFT OUTER JOIN',因爲您在表1中註釋了social_memtex可能沒有任何匹配的條目。 – anubhava 2011-12-23 03:57:50

1
 
//use mysql_real_escape_string for your $en['User'] 
SELECT sm.*, DATE_FORMAT(sm.m_lld,'%m/%d/%y') 
        AS m_lld_formatted 
        FROM social_members sm 
        JOIN social_meminfo smi ON(smi.m_id = sm.m_id) 
        JOIN social_memtext smt ON(smt.m_id = sm.m_id) 
        WHERE sm.m_user = "$en['user']" 
+0

有一個問題,當if(@mysql_num_rows($ res)== 0)時,social_memtext可能沒有條目,因此call404();'運行它會拋出錯誤404如何發送它不會錯誤,如果'smt'是空的? – acctman 2011-12-22 12:45:48

+1

如果即使'social_memtext'沒有條目也要返回結果,你可以將'JOIN'改爲'LEFT JOIN',並且該表中的任何列只有'NULL'值。 – 2011-12-22 15:34:43