Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/236.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/69.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如果一列具有重复值,则将表的行标记为重复_Php_Mysql_Codeigniter - Fatal编程技术网

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

Php 如果一列具有重复值,则将表的行标记为重复,php,mysql,codeigniter,Php,Mysql,Codeigniter,我有一个表caller,它记录我收到的所有呼叫。这些列是“phone”、“time”和“ID”,然后我会将它们显示在网页上。现在我想用打过两次或两次以上电话的电话号码显示(重复)。 现在我正在使用以下查询 SELECT `Phone`, `Id`, `time` FROM callers GROUP BY phone ORDER BY `time` DESC 此查询仅返回已呼叫两次的手机一次。我想让那些手机看他们打过多少次电话。只要在每一部重复使用过的手机前写一个(R)。 我正在使用Cod

我有一个表
caller
,它记录我收到的所有呼叫。这些列是
“phone”、“time”和“ID”
,然后我会将它们显示在网页上。现在我想用打过两次或两次以上电话的电话号码显示
(重复)
。 现在我正在使用以下查询

SELECT `Phone`, `Id`, `time` 
FROM callers
GROUP BY phone
ORDER BY `time` DESC 
此查询仅返回已呼叫两次的手机一次。我想让那些手机看他们打过多少次电话。只要在每一部重复使用过的手机前写一个
(R)
。 我正在使用Codeigniter框架和PHP

示例(我想要的)

上面的问题给了我什么

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

此查询将返回每个电话号码的呼叫数

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


您需要将重复信息与列出的数字分开计算。下面是一个使用左连接的方法:

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
。您可以从
调用者
中为其余列选择所需的任何列。

运行此查询。这只给了我那些只调用过一次的记录…我首先要做的是…我的回答对你有帮助吗?与上面相同的结果:(.但它也会有重复标记或电话计数?有没有一种方法可以在不使用GROUP BY的情况下标记重复的电话号码?因为我认为GROUP BY在这里帮不了我是的,它给了我每个人打过的电话的准确计数。但是它将每个号码分组并显示为一个。
 SELECT `Phone`, `Id`, `time`, IF(count(Id)>1, 1, 0) as repeat 
 FROM callers
 GROUP BY phone
 ORDER BY `time` DESC 
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 ;