如果一列具有重复值,则将表行标记为重复

时间:2015-08-10 11:04:22

标签: php mysql codeigniter

我有一张表caller,可以跟踪我收到的所有电话。列为"phone" , "time" , and "ID",然后我会在网页上显示。现在,我想向(Repeat)显示已拨打两次或更多次的电话号码。 现在我正在使用以下查询。

SELECT `Phone`, `Id`, `time` 
FROM callers
GROUP BY phone
ORDER BY `time` DESC 

此查询仅返回一次调用两次的电话。我想尽可能多地给这些手机看电话。只想在每个重复的手机前面写一个(R)。 我正在使用Codeigniter框架和PHP。

示例(我想要的)

ID       Phone          Time
1        789654 (R)      3:40
2        789654 (R)      3:30
3        123456          2:00
4        012344          1:00

以上查询给我的内容

ID       Phone          Time
1        789654 (2)      3:40
2        123456          2:00
3        012344          1:00

2 个答案:

答案 0 :(得分:2)

您需要与列出数字分开计算有关重复的信息。以下是使用LEFT JOIN的方法:

SELECT c.*, cc.RepeatFlag
FROM callers c LEFT JOIN
     (SELECT `Phone`, 'R' as RepeatFlag
      FROM callers
      GROUP BY phone
      HAVING cnt > 1
     ) cc
     ON cc.phone = c.phone
ORDER BY `time` DESC ;

这使用了一些技巧。子查询仅返回具有重复项的电话。对于这些,它设置RepeatFlag。对于不匹配,这是NULL。您可以从callers中为其余列选择所需的列。

答案 1 :(得分:0)

此查询将返回每部电话号码没有。

 SELECT `Phone`, `Id`, `time`, count(Id) as no_of_calls 
 FROM callers
 GROUP BY phone
 ORDER BY `time` DESC 

或者

 SELECT `Phone`, `Id`, `time`, IF(count(Id)>1, 1, 0) as repeat 
 FROM callers
 GROUP BY phone
 ORDER BY `time` DESC