in_array 함수를 사용하면
$비교리스트 = array("내용1", "내용2");
if(in_array($비교할대상, $비교리스트))
이렇게 비교할 수 있는걸로 기억합니다.
그렇다면 만약에 $_GET을 사용하는 거랑
SELECT * from modnfile where id= 이렇게 사용하는 것중에
어느게 더 나을까요?
지금 후자쪽을 하려다가 막혀서 물어봅니다 ㅠ
PHP | PHP 7.3 |
---|
in_array 함수를 사용하면
$비교리스트 = array("내용1", "내용2");
if(in_array($비교할대상, $비교리스트))
이렇게 비교할 수 있는걸로 기억합니다.
그렇다면 만약에 $_GET을 사용하는 거랑
SELECT * from modnfile where id= 이렇게 사용하는 것중에
어느게 더 나을까요?
지금 후자쪽을 하려다가 막혀서 물어봅니다 ㅠ
db에 값을 풀스캔해서 array에 담아야 하는 경우가 왜 있는지 모르겠지만 꼭 그렇게 해야 한다면 쿼리를 통해 array로 모든 값을 담아서 저장한 후 해당 array에 내가 비교하고 싶은 값이 있는지 확인하는 php 코드를 쓸 수 있겠죠.
그런데 왜 이렇게 하는지도 모르겠고요.
일단 특정 값이 있는지 확인하는 경우 해당 값의 유무만 확인하는 쿼리를 하는게 일반적이지 않나요?
이전 질문에서도 답변을 받으신 해당 컬럼이 index 처리가 되어 있다면 풀스캔 해서 값을 찾는게 아닌 인덱싱된 데이터를 근거로 아주 몇개의 컬럼만 조회해서 값 유무를 확인해 줄 수도 있을 겁니다.
$_GET 이 왜 등장하는지도 모르겠습니다.
제가 아직 db에 입문한지 별로 안되서 헷갈리는게 많네요 ㅠ
$db = new mysqli($host, $user, $pw, $database);
// Create database
$sql = "SELECT * FROM table where id = 'ddd';";
if ($db->query($sql) === TRUE) {
echo "1";
} else {
echo "2";
}
인덱스를 사용하지 않고 이렇게 해도 작동하지 않을까요?
전 아직도 $_GET, in_array 가 왜 나오는지 모르겠습니다.
일단 기존의 이미 저장된 값이 있다면 회피하려고 db에 조회를 하고 있다면 무언가 다시 하고 없다면 또 어떤 작업을 하고 하는 것이 왜 문제가 되는지 잘 이해하지 못하구 있구요.
쿼리 조회시 인덱스 사용 유무에 따라 쿼리 응답의 시간이 대폭 차이가 날수도 있고 아닐 수도 있고 그건 데이터의 양이나 쿼리 구조에 따라 다를겁니다.
보통 이미 db에 값이 있는 것을 확인후 뭔가 다음 작업이 이루어질때 보통 지금 생각하시는 방식의 db 조회 후 해당 값 유무 또는 해당 값을 확인후 하는 것이 일반적입니다.
이게 질문인게 조금 이해가 가진 않지만
먼저 질문하신 것과 연결되어서 그냥 select 쿼리를 할때 결과가 나오는 속도가 걱정스럽다?? 이런 질문이지 아리송하네요.
인덱스가 걸리지 않는 컬럼에서 값을 조회할때도 데이터 양이 굉장히 많지 않다면 별 문제는 없습니다.
제가 경험한 것 중에 새로 만든 데이터가 기존 db 테이블에 있는지 확인하기 위해 해당 데이터를 전부 조회해서 그걸 배열 데이터에 담아 놓은 후 그 배열을 활용하여 새로 만든 데이터가 있는지 확인하고 하는 경우를 거의 보지 못했습니다.
- 아마 계속 중복이 될 경우를 대비해서 쿼리해와 배열에 담으려고 하시는건지 모르겠지만 확율상 중복 데이터가 있을 경우가 극히 적을 텐데 전체 데이터를 항상 미리 다 불러 온다는게 조금 비효율 아닌가 하는 생각입니다. 제가 이해한게 맞나 모르겠네요.
참고로 저는 db나 php에 많은 것을 알지 못하는 일반 사용자라 경험에 의한 제 사견이니 제가 틀렸을 가능성이 매우 높습니다.
그리고 중복 자체가 안되게 만들고 중복확인 쿼리 자체를 하지 않는게 어떨지 생각을 해봤습니다. 매번 바뀌는 유닉스타임을 붙여준다던지...
$비교리스트 = array();
array 값을 담았다면 그대로 이용을 하면 되는데 무엇이 문제인지 왜 갑자기 $_GET, 쿼리문이 등장하는지 둥절입니다.