MySQL로 빈 필드 확인
특정 기준을 가진 사용자를 확인하는 쿼리를 작성했습니다. 하나는 이메일 주소가 있다는 것입니다.
우리 사이트는 사용자가 이메일 주소를 가질 수 있는지 여부를 허용합니다.
$aUsers=$this->readToArray('
SELECT `userID`
FROM `users`
WHERE `userID`
IN(SELECT `userID`
FROM `users_indvSettings`
WHERE `indvSettingID`=5 AND `optionID`='.$time.')
AND `email`!=""
');
이것이 SQL에서 빈 필드를 확인하는 가장 좋은 방법입니까? 방금 "IS NOT NULL"을 시도했지만 이메일 주소가없는 사용자 레코드가 반환되었습니다.
위의 쿼리는 작동하지만 호기심 때문에 올바른 방법으로 수행하고 있는지 궁금했습니다.
빈 필드는 빈 문자열 또는 NULL
.
둘 다 처리하려면 다음을 사용하십시오.
email > ''
range
테이블에 비어있는 이메일 레코드 (두 유형 모두)가 많은 경우 액세스의 이점을 누릴 수 있습니다 .
네, 당신이하는 일은 옳습니다. 이메일 필드가 빈 문자열이 아닌지 확인하고 있습니다. NULL은 데이터가 없음을 의미합니다. 빈 문자열 ""
은 길이가 0 인 빈 문자열입니다.
null 검사도 추가 할 수 있습니다.
AND (email != "" OR email IS NOT NULL)
당신은 사용할 수 있습니다
IFNULL(email, '') > ''
이것은 작동하지만 여전히 널 레코드가 리턴 될 가능성이 있습니다. 레코드를 삽입 할 때 이메일 주소를 길이가 0 인 문자열로 설정할 수 있지만 어떻게 든 시스템에 들어오는 NULL 이메일 주소의 경우를 처리 할 수 있습니다.
$aUsers=$this->readToArray('
SELECT `userID`
FROM `users`
WHERE `userID`
IN(SELECT `userID`
FROM `users_indvSettings`
WHERE `indvSettingID`=5 AND `optionID`='.$time.')
AND `email` != "" AND `email` IS NOT NULL
');
빈 문자열 (email! = "")과 NULL 사이에는 차이가 있습니다. NULL은 null이고 빈 문자열은 무언가입니다.
NULL이 아니고 비어 있거나 공백이있는 모든 레코드를 찾으려면 다음과 같이 작동합니다.
LIKE '%\ '
백 슬래시 뒤에 공백이 있는지 확인하십시오. 자세한 정보 : http://dev.mysql.com/doc/refman/5.0/en/string-comparison-functions.html
이 코드에서 문제를 확인하십시오.
$sql = "SELECT * FROM tablename WHERE condition";
$res = mysql_query($sql);
while ($row = mysql_fetch_assoc($res)) {
foreach($row as $key => $field) {
echo "<br>";
if(empty($row[$key])){
echo $key." : empty field :"."<br>";
}else{
echo $key." =" . $field."<br>";
}
}
}
참고 URL : https://stackoverflow.com/questions/2327029/checking-for-an-empty-field-with-mysql
'developer tip' 카테고리의 다른 글
Facebook 앱 : localhost가 더 이상 앱 도메인으로 작동하지 않습니다. (0) | 2020.08.31 |
---|---|
파이썬에 주어진 PID를 가진 프로세스가 있는지 확인하는 방법은 무엇입니까? (0) | 2020.08.31 |
ES2015에서만 0에서 n까지의 숫자 범위를 생성하는 방법은 무엇입니까? (0) | 2020.08.31 |
URI [/WEB-INF/pages/apiForm.jsp] [duplicate]가있는 HTTP 요청에 대한 매핑이 없습니다. (0) | 2020.08.31 |
확인하는 동안 오류가 발생했습니다. (0) | 2020.08.31 |