从一个表迁移到另一个表

时间:2016-07-25 18:06:40

标签: php mysql

我有2个表,一个有100,000个数据记录,一个有"不感兴趣"

表"业务"有一个" BusinessID |大约10个其他信息栏

桌子"不感兴趣"有一个" BusinessID"和一个DateOfCall。

目前我通过检查是否存在不感兴趣并且DateOfCall少于42天然后不在选择中显示来过滤掉数据。 (以下代码)。

SELECT * FROM businesses where PostCode like '" . $pcode . "%'
and BusinessType like '%$btype%'
and BusinessID NOT IN (SELECT BusinessID FROM telesales.notinterested WHERE NOW() BETWEEN DateOfCall and (DateOfCall + INTERVAL 42 DAY) ) 
and AppointmentDate is null
ORDER BY RAND() limit 100"

一开始很好,但现在"不感兴趣"有大约30,000条记录,它变得非常缓慢,特别是有一个字母的邮政编码。

我在bussinesses表中添加了一个名为" notinterested"我想在那里写一个约会。

从" notinterested"迁移DateOfCall的最简单方法是什么?表格进入"业务"?的新栏目我有点担心它的实时数据并且没有太多时间

2 个答案:

答案 0 :(得分:2)

要回答原始问题,您可以运行此查询以更新添加的日期字段。

UPDATE businesses
INNER JOIN
(SELECT BusinessID, MAX(DateOfCall) maxdateofcall FROM telesales.notinterested WHERE NOW() BETWEEN DateOfCall AND (DateOfCall + INTERVAL 42 DAY) GROUP BY BusinessID) recentnotinterested
    ON businesses.BusinessID = recentnotinterested.BusinessID
SET businesses.notinterested = recentnotinterested.maxdateofcall;

答案 1 :(得分:1)

做了一个款待,谢谢。还是有点慢。

编辑:没有好处,但它好一点。

SELECT * FROM businesses where PostCode like '" . $pcode . "%'
and BusinessType like '%$btype%'
and NOT EXISTS (SELECT b.BusinessID FROM businesses b
                left join telesales.notinterested ni on ni.BusinessID = b.BusinessID
                WHERE (ni.DateOfCall > NOW() + INTERVAL 42 DAY))
and AppointmentDate is null
LIMIT 200