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 ;