채택완료

sql 도움을 부탁합니다.

2021-03-23 (화) 22:54:18 4,205

아래처럼 데이터가 있을 경우

tbl name : test

id     min     max

1       11       20

2      21       30  

3      31       40

4      41       50

검색은 min과 max를 구간으로 판단해 해당구간의 id를 조회합니다.

예) 25가 검색어일 경우 검색 id는 2

|

답변 4개 / 댓글 11개

채택된 답변
+20 포인트
Copy
$num = 25;
$sql = "SELECT * FROM test";
$res = sql_query($sql);
while($row = sql_fetch_array($res)) {
 if($row['max'] < $num) continue;
 $id = $row['id'];
 if($id) break;
}
echo $id;

답변에 대한 댓글 3개

답변감사합니다.
혹시 sql만을 이용한 조회방법은 없겠습니까?
제 생각엔, 불가능할 것 같습니다.
그렇군요.....에고고
정말 감사합니다^^
2021-03-24 (수) 03:27:13

$sql ="SELECT id FROM test WHERE $some_value_25 between min AND max";
$row = sql_fetch($sql);

답변에 대한 댓글 4개

님이 답 달아주셨는데 새벽이라 작성자님이 못본거 같네요 ㅎㅎ

어제 밤에 이글 보고 느꼈습니다.
PHP 개발자는 PHP 로만 해결하려고 한다는걸 ㅋㅋ

- 어설픈 풀스택 개발자 -
( ^ _______ ~) ===b 굿 !!
확인이 늦어 인사가 늦었네요. 감사합니다 ^O^
sql 한방으로 해결하고 싶었는데...
감사!!!감사!!!합니다.
대용량 DB가 아니면
이렇게 하나 저렇게 하나 마찬가지죠.

설명 부족입니다

min, max가 항상 설명 처럼 (11 , 20) ~~ (91, 100) ~~ (501, 510)

이런 상황인가요?

그게 아니라면 min, max 값 등록시 어떤 규칙이라도 있는 것인가요?

답변에 대한 댓글 3개

min, max 값은 님이 쓰신 규칙입니다.
겹치거나하는 경우는 발생하지 안습니다.
답변감사합니다.
sql만으로 조회가 안될까 생각했는데
아래 sinbi님 말씀처럼 sql만으로는 포기입니다. ㅠㅠ
감사합니다.
균이 님, 방법이 더 좋네요.

$num = 25;
$stx = floor($num / 10) * 10;
$min = $stx +1;
$max = $stx + 10;
$sql ="SELECT id FROM test WHERE min = $min AND max = $max";
$row = sql_fetch($sql);
echo $row['id']; // 2
2021-03-23 (화) 23:13:47

SELECT id FROM test where between 21 and 30;

으로 해보세요~

답변에 대한 댓글 1개

죄송합니다. 제가 설명이 부족했습니다.
검색어가 25일경우
min과 max값을 구간으로 판단해서 id값을 조회합니다.
검색어에 min과 max값은 주어지지 안습니다.

답변을 작성하려면 로그인이 필요합니다.