2013-08-18 69 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'中没有用处。 –