我有一个表 caller
,它跟踪我收到的所有电话。这些列是 "phone"、 "time"和 "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
最佳答案
您需要与列出数字分开计算有关重复的信息。下面是一个使用 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
中选择您想要的任何列作为其余列。
关于php - 如果一列具有重复值,则将表的行标记为重复,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31917893/