有两个表格存在问题; leads
和contactAttempts
。
我正在尝试提取2012年与之联系的不同潜在客户,并在单独的表格中使用文本列中的特定关键字。
问题在于我一遍又一遍地得到相同的领导者,结果是如此巨大,以至于它超时并且崩溃了网站。
我尝试过多种变体,包括一个sql语句。将它们分成2个sql语句是我最近的尝试。
Select distinct目前无法使用我正在尝试的格式。 id
是两个表中的主要内容,leadID
将leads
与contactAttempts
连接起来:
<? $sql="SELECT *
FROM contactAttempts a
JOIN leads l
ON l.id = a.leadID
WHERE l.agentID = 2
AND l.leadType IN(0,2)
AND a.timestamp BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'
LIMIT 0,50";
$res=mysql_query($sql);
while($row=mysql_fetch_assoc($res)){
$sql2="SELECT DISTINCT leadID FROM contactAttempts WHERE
leadID='$row[id]' AND (contactAttempts.notes LIKE '%shown%' OR
contactAttempts.notes LIKE '%showed%' OR contactAttempts.notes LIKE
'%offer%' OR contactAttempts.notes LIKE '%inspection%' OR
contactAttempts.notes LIKE '%appraisal%' OR contactAttempts.notes LIKE
'%closing%' OR contactAttempts.notes LIKE '%drive%' OR
contactAttempts.notes LIKE '%drove%' OR contactAttempts.notes LIKE '%car%'
OR contactAttempts.notes LIKE '%preview%' OR contactAttempts.notes LIKE
'%previewed%' OR contactAttempts.notes LIKE '%took pictures%') LIMIT 1";
$res2=mysql_query($sql2);$x=0;
while($row2=mysql_fetch_assoc($res2)){
$x++;
echo $x.' - '.$row2['leadID'];
echo '<br />';
}
} ?>
这是一个源代码示例: 表格主管:
id - 100,其他一些对此脚本无用的列
id - 200,其他一些对此脚本无用的列
表contactAttempts:
id - 1,leadID - 100,备注 - '向客户展示房屋,他们喜欢它',时间戳 - '2012-01-21 12:05:11'
id - 2,leadID - 100,注意 - '再次向客户展示房屋,他们喜欢它',时间戳 - '2012-02-21 12:05:11'
id - 3,leadID - 200,注意 - “向不同的客户展示房屋,他们讨厌它”,时间戳 - “2012-01-21 12:05:11”
目前,结果将是:100,100,200。我需要的结果是100,200。该脚本需要省略多次出现的leadID 100。
答案 0 :(得分:1)
<?
$sql="
SELECT
l.id as id,
a.id as attempt_id,
a.leadID as leadID,
FROM leads l
INNER JOIN (
SELECT id, leadID
FROM contactAttempts
WHERE contactAttempts.notes REGEXP 'shown|showed|offer|inspection|appraisal|closing|drive|drove|car|preview|previewed|took pictures'
AND timestamp BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'
) as a
ON a.leadID = l.id
WHERE l.agentID = 2
AND l.leadType IN(0,2)
ORDER BY l.id, a.id
";
$res=mysql_query($sql);
$currLead = 0;
$x=0;
while($row=mysql_fetch_assoc($res)){
if ($currLead != $row['leadID']){
echo 'NEW DISTINCT LEAD = '.$row['leadID'].'<br />';
$x=0;
}
$x++;
echo $x.' of lead '.$row['leadID'].' attempt '.$row['attempt_id'];
echo '<br />';
$currLead = $row['leadID'];
} ?>
答案 1 :(得分:0)
在我(或其他人)解决实际问题之前;对您的第一次查询提出一些意见。
首先,该查询(我相信)在逻辑上与以下相同,我觉得更容易阅读:
SELECT *
FROM contactAttempts a
JOIN leads l
ON l.id = a.leadID
WHERE l.agentID = 2
AND l.leadType IN(0,2)
AND YEAR(a.timestamp) = 2012
LIMIT 0,50
其次,YEAR()会阻止使用索引,因此对于较大的数据集,这会大大减慢速度。 a.timestamp BETWEEN '2012-01-01 00:00:00' AND '2012-12-31 23:59:59'
可能看起来很麻烦,但索引数据会快得多。
第三,没有ORDER BY的LIMIT几乎没有意义。
此外,同样,LIKE '%...'
无法使用索引,但LIKE '...%'
可以