输入此查询后为什么我的PHP MYSQL查询无法正常/运行?

时间:2017-07-03 06:46:18

标签: php mysql

我有两个表 tableOne = 90K 数据和 tableTwo = 100k 数据,我会在给定条件下查找两个表上的重复数字,匹配必须是 1:1 如果在另一个表上有多个匹配,则只有一个匹配将被标记为匹配(假设两个表上的数据都匹配数据)。

我在下面有这个选择语句,但是当我在我的本地xampp上运行它甚至在CMD上时,我按下回车后屏幕会冻结,然后它需要几个小时才会返回内存错误。希望你能帮助我。

 SELECT rNum,
        cDate,
        cTime,
        aNumber,
        bNumber,
        duration,
        tag,
        aNumber2,
        bNumber2,
        'hasMatch',
        concatDate,
        timeMinutes
        FROM tableOne a
        LEFT JOIN
        tableTwo b ON a.aNumber2 = b.aNumber2 
        AND a.bNumber2 = b.bNumber2
        WHERE a.hasMatch = 'valid'
        AND (a.duration - b.duration) <= 3  
        AND (a.duration - b.duration) >= -3 
        AND TIMEDIFF(a.concatDate,b.concatDate) <= 3
        AND TIMEDIFF(a.concatDate,b.concatDate) >= -3

提前谢谢你。

2 个答案:

答案 0 :(得分:0)

如果你与两张桌子做1:1的关系,那么我认为你应该选择INNER JOIN而不是LEFT JOIN

其次,您的查询似乎没有正确编入索引。因此,最好使用EXPLAIN SELECT ...来查看SQL的配置文件并为Filters创建INDEXES。

答案 1 :(得分:0)

  1. "new hello" SELECT aNumber2中,根据您的加入规则,表格a和表格b都有aNumber2列。这是一个问题。如果两个表具有相同名称的列,则在选择时应指定该表。 例如像这样

    SELECT a.aNumber2 as a_number2,....

  2. 在您的查询中,durationconcatDate

    等其他列存在同样的问题
    1. 另一件事是你应该在你的情况下使用INNER JOIN而不是LEFT JOIN

    2. 如果您的最终结果有多行(数千),请逐步执行...将LIMIT添加到您的示例中,每次都获得100个结果。