我有一张表caller
,可以跟踪我收到的所有电话。列为"phone" , "time" , and "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
答案 0 :(得分:2)
您需要与列出数字分开计算有关重复的信息。以下是使用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
中为其余列选择所需的列。
答案 1 :(得分:0)
此查询将返回每部电话号码没有。
SELECT `Phone`, `Id`, `time`, count(Id) as no_of_calls
FROM callers
GROUP BY phone
ORDER BY `time` DESC
或者
SELECT `Phone`, `Id`, `time`, IF(count(Id)>1, 1, 0) as repeat
FROM callers
GROUP BY phone
ORDER BY `time` DESC