2014-09-30 460 views
0

如果在執行sql查詢時未找到任何記錄,我希望得到'0'。我嘗試了很多東西,如ifnull(count(*),0),但沒有給我我想要的結果。如果在COUNT(*)查詢中找不到記錄,則返回0在MYSQL中

查詢是如下提到:

SELECT chat_room_id,COUNT(*) FROM chat WHERE sender_id=13 GROUP BY chat_room_id 

它給了我如下的結果:

__________________________ 
| chat_room_id | Count(*) | 
-------------------------- 

它不返回任何「空」或「0」,所以我想' 0'OR'null'如果沒有找到記錄。

+0

不應該查詢是SELECT chat_room_id,COUNT(*)FROM聊天WHERE SENDER_ID = 13 GROUP BY chat_room_id – Satya 2014-09-30 08:03:29

+0

即使發件人13你想有一個返回的記錄不存在? – 2014-09-30 08:16:30

+0

對不起,我編輯了我的問題,它是chat_room_id而不是sender_id。 – ckpatel 2014-09-30 08:37:54

回答

2

只要因爲有一個表Chats與字段sender_id那麼即使在表中不存在sender_Id 13,以下情況也會返回一行。

set @sender = 13; 
set @chats = (select count(*) from Chat where sender_id = @sender); 

select @sender AS sender_id, IFNULL(@chats,0) AS Count_chats 
; 

See this working at SQLFiddle

+0

嘿,謝謝它爲我工作。 – ckpatel 2014-09-30 09:23:59

+0

很高興,猜你會爲chat_room_id調整它,乾杯 – 2014-09-30 09:25:08

0

後,您的編輯改變

試試這個:

SELECT distinct c1.chat_room_id, 
(select count(*) from chat c2 c2.chat_room_id = c1.chat_room_id and c2.sender_id = 13) 
FROM chat c1 

關注:

一臺名爲聊天我想包含在你的數據庫中的所有聊天記錄,並沒有消息和發件人。

相反,如果你有一個名爲CHAT_ROOM所有的聊天記錄列表表,以便您的查詢就會變成:

SELECT chat_room_id, 
(SELECT COUNT(*) 
FROM chat 
WHERE chat.chat_room_id = chat_room.chat_room_id AND chat.sender_id = 13) 
FROM chat_room 
+0

你沒有提到你的第一個查詢中的c2是什麼。在第二個查詢中,它會爲所有聊天室返回0。 – ckpatel 2014-09-30 09:08:40

+0

固定,是一個錯誤。但是你不要告訴我你的正確表結構。 – 2014-09-30 09:25:53

+0

我在我的數據庫聊天和chat_room中有兩個表。在chat [id,message,sender_id,chat_room_id]中,在chat_room [id,created_at]中。所以我想要聊聊所有聊天室的聊天記錄。 – ckpatel 2014-09-30 09:43:39

-2

你可以使用mysql_affected_rows()函數;方法來獲取受查詢影響的行的詳細信息。

檢查thisthis

+0

我沒有看到關於問題標籤的'php' – Sharky 2014-09-30 08:12:48

+0

@Sharky - 這不是PHP,我只需要它的MySQL。如操作所示, – ckpatel 2014-09-30 08:39:28

-2

你可以把SQL在子查詢,這將總是返回一行

select sub.id,sub.counter from (select sender_id as id,count(*) as counter from chat where sender_id = 13) sub 

如果沒有記錄或1,如果有這將返回0。

+0

不能與GROUP BY一起使用。 – Sharky 2014-09-30 08:11:35

+0

您可以將Group By移動到外部選擇。 – kodeally 2014-09-30 08:30:29

0

您不能查詢不在源表中或計算中不可用的數據。

如果你有一個包含所有可用的聊天室的桌子,你可以使用該表使用LEFT OUTER JOIN

SELECT 
    CR.chat_room_id, 
    COUNT(C.chat_room_id) 
FROM 
    chat_rooms CR 
    LEFT JOIN chat C 
    ON CR.chat_room_id = C.chat_room_id 
     AND C.sender_id = 13 -- Moved from WHERE to keep all non-matching records from CR 
GROUP BY 
    CR.chat_room_id 

一個簡單的查詢,以獲得所需的記錄,如果你沒有一個特定的表,你可以使用LEFT OUTER JOINsubquery得到結果:

SELECT 
    CR.chat_room_id, 
    COUNT(C.chat_room_id) 
FROM 
    (SELECT DISTINCT chat_room_id FROM chat) CR 
    LEFT JOIN chat C 
    ON CR.chat_room_id = C.chat_room_id 
     AND C.sender_id = 13 -- Moved from WHERE to keep all non-matching records from CR 
GROUP BY 
    CR.chat_room_id 

SQLFiddle demo for the second query

+0

COUNT(*)永遠不會爲NULL,至少爲1.如果你想要0,你需要從左連接表(即COUNT(c.chat_room_id))的列中計數 – Gervs 2014-09-30 09:01:18

+0

@Pred,它總是返回1對於所有chat_room_id。 – ckpatel 2014-09-30 09:02:00

+0

@Gervs你是對的,修復了答案,謝謝 – Pred 2014-09-30 09:05:33

0

您是否在尋找返回所有的情況下,發件人ID不存在chat_room_ids?

像,如果說sender_id 9不存在,你想要返回什麼?

如果你想要的東西,像

chat_room_id計數 NO_RECORDS 0

然後下面的查詢將工作:

declare @Chat_Room_Id varchar(3), 
 
@Count int 
 

 
select @Chat_Room_Id = cast(chat_room_id as varchar(3)), @Count = count(*) from chat where sender_id=13 group by chat_room_id 
 

 
select coalesce(@Chat_Room_Id, 'NO RECORDS') chat_room_id, coalesce(@Count, 0) count

在情況下,我不明白,你能否進一步澄清?

-hth Sourav

相關問題