2013-08-18 72 views
0

$結果= mysql_query(」 SELECT 一個。user_id,一。user_name,一。cell_no,一。internet_package,一。activation_date如何做多個左連接與多個MySQL在哪裏?

    FROM `alepo_data` a 
        LEFT JOIN `".$month2."` c ON c.`user_id` = a.`user_id` 
        WHERE c.`user_id` IS NULL 
       "); 

我有一個像上面的查詢...在這裏我想檢查$ month2。現在如果我想以相同的方式比較$ month1,那麼查詢是什麼?

請注意,這裏$ month1或$ month2是相同表格類型(具有相同表格結構)只是擁有不同類型的使用數據。

任何人都可以幫助我嗎?

+1

如果您在一年的12個不​​同月份有12個相同的表格,那麼您的數據庫設計存在嚴重缺陷,並且您的問題是其直接後果。 – lafor

+0

你如何比較? –

+0

我沒有辦法改變數據庫。而且,每個月的表格都包含2千萬個數據。 –

回答

0

你可以做多個聯接僅僅通過增加加入到你已經擁有的那些:

SELECT 
    a.user_id, 
    a.user_name, 
    a.cell_no, 
    a.internet_package, 
    a.activation_date 
FROM 
    `alepo_data` a 
    LEFT JOIN `month1Data` c1 ON c1.`user_id` = a.`user_id` 
    LEFT JOIN `month2Data` c2 ON c2.`user_id` = a.`user_id` 
WHERE 
    c1.`user_id` IS NULL OR c2.`user_id` IS NULL 

需要注意的是,如果你的表具有相同的(甚至很相似)表結構,你或許可以優化你的表結構。您可能可以將所有內容放入一張添加了「日期」或「月份」列的表格中。如果沒有,您可能仍然可以申請star schema。如果表由於性能原因而分開,請查看table partitioning

+0

我的month1Data和month2Data兩個表都有相同的結構(相同的列)。我理解你的查詢,但爲什麼「OR」,爲什麼不是「AND」?請注意,'alepo_data'是用戶數據庫。我想檢查哪個用戶在month1Data和month2Data中沒有使用數據。你能否給我一個解決方案,應該使用「或」或「與」,並且應該在「SELECT a.user_id」之前使用「DISTINCT」? –

+0

「OR」或「AND」取決於你想要做什麼。 (我不能只是猜測)。你想查找一個月內沒有數據的所有用戶(使用'OR')還是所有月份(使用'AND')。如果你有'JOIN'表的每個用戶有多行記錄,'DISTINCT'(或'GROUP BY'形式)是必需的。 –

+0

@Thomas,alepo_data是包含用戶的個人信息(用戶ID,姓名,手機號碼,他正在使用的互聯網套餐,他的線的激活日期等)的表格。 'month1Data'(月份的結構相同)至'month12Data'(12月)包含每月每個用戶的使用數據(用戶ID,會話時間,上傳,下載,連接時間)。我想跟蹤那個用戶在'month1Data'和'month2Data'中沒有用處。 –