2011-12-22 18 views
0

新しいテーブル$ res_infoと$ res_textを2つクエリする必要があります。どのようにして3つのクエリを1つにまとめることができますか?最初のクエリ$ resには、他の2つのテーブルで使用される一意のフィールドm_idがすべて含まれています。これはUNIONで行うことができますか?私はあなたが1 OUTER JOINと、このような別のINNER JOINを探していると思うあなたのコメントに基づいて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

テーブル間の関係はどのようになっていますか?すべて1対1ですか? –

+1

あなたのキー 'm_id'の3つのテーブルで単純な結合を使うことはできませんか? – anubhava

+0

@anubhavaクエリ1はm_idを取得する前にm_userを使用する必要があります...それらにどのように参加するのですか? – acctman

答えて

1

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

+1

テーブル「social_memtex」に一致するエントリがない可能性があるというコメントの1つにあなたが書いたので、「LEFT OUTER JOIN」を使用しました。 – anubhava

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

social_memtextにはエントリがない可能性がありますので、if(@mysql_num_rows($ res)== 0)call404(); 'それを実行してエラー404を送信します'smt'が空であればエラーにならないでしょうか? – acctman

+1

'social_memtext'にエントリがない場合でも結果を返すには、その' JOIN'を 'LEFT JOIN'に変更することができ、そのテーブルのどのカラムも単に' NULL'値を持ちます。 –

関連する問題