我有一张记录我接到的所有电话的表。这些列是caller
然后我会显示在网页上。现在我想显示"phone" , "time" , and "ID"
与电话号码,已经打了两次或更多。
现在我使用以下查询。
SELECT `Phone`, `Id`, `time`
FROM callers
GROUP BY phone
ORDER BY `time` DESC
此查询只返回一次已呼叫两次的电话。我想让他们看尽可能多的电话。只想在每一个重复的电话前写一个
(Repeat)
。我正在使用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/