我有一张记录我接到的所有电话的表。这些列是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/

10-16 18:49