2011-09-06 4 views
2
RowID  TimeReceived TimeRead tbl_user_UserID  tbl_message_MsgID 

    5  2011-09-06 11:16:20 NULL    2    1 
    6  2011-09-06 11:17:04 NULL    3    1 
    7  2011-09-06 11:17:19 NULL    100    1 

이 내 테이블 내가 읽은 시간이 null 인 행을 계산 할는 특정 필드가 비어있을 때 행 수를 얻기 위해 어떻게

command = new MySqlCommand("SELECT COUNT(Distinct RowID) FROM tbl_usermessage WHERE TimeRead= NULL AND [email protected]", connectionString); 
     command.Parameters.Add("@value1", MySqlDbType.Int32, 25); 
     command.Parameters["@value1"].Value = MessageID; 
     int nnnID = Convert.ToInt32(command.ExecuteScalar()); 

, 그것은 그것이 있어야 출력으로 나에게 공을 준다 3. 나는 어디가 잘못되었는지. null로 읽은 시간의 기본값을 설정했습니다. 수를 얻기위한

+0

'ANSI_NULLS'이 꺼져있는 경우에만 작동합니다 – V4Vendetta

+0

왜 COUNT (*)가 아닌 COUNT (고유 RowID)를 사용하고 있습니까? 나머지 질문에서 이것이 필요하다는 것은 분명하지 않습니다. –

답변

1

당신의 SQL이 잘못되었습니다. 당신은 IS NULL를 사용하여 NULL를 확인할 수 있습니다

command = new MySqlCommand("SELECT COUNT(Distinct RowID) FROM tbl_usermessage WHERE TimeRead IS NULL AND [email protected]", connectionString); 
     command.Parameters.Add("@value1", MySqlDbType.Int32, 25); 
     command.Parameters["@value1"].Value = MessageID; 
     int nnnID = Convert.ToInt32(command.ExecuteScalar()); 
3

쿼리

select count(Distinct RowID) from table where TimeRead is null 
+0

동의합니다, TimeRead = null은 항상 거짓입니다. 아무것도 null과 같습니다. –

+0

이 쿼리는 항상 '0'을 반환합니다. –

2

사용 대신 "is NULL를"당신의 매개 변수 @value1가 올 경우 "= NULL"

SELECT COUNT(Distinct RowID) FROM tbl_usermessage WHERE TimeRead is NULL ... 

이 또한 확인!

관련 문제