채택완료

다른 테이블 연관 필드를 이용해 검색하려면?

예를 들어,

https://sir.kr/g5_skin/10258  로그인 스킨 경우,

해당 테이블에 회원 닉네임은 저장안 되고, 오직 회원 아이디만 저장됩니다.

그러다보니, 회원 닉네임을 이용한 검색이 불가능합니다.

get_member 함수를 이용해 리스트에 닉네임을 뿌려주는 건 가능한데말이죠. 


g5_member 테이블의 닉네임 필드를 이용해 검색 옵션에 추가해 검색하는 방법은  없을까요? 

아니면, 해당 테이블에 닉네임 필드 생성부터 다 해줘야 가능할까요?

답변 1개 / 댓글 5개

채택된 답변
+20 포인트
2017-10-07 (토) 17:58:24

where절에 in 을 사용하여 다른 테이블 컬럼값을 이용한 검색이 가능합니다.

(예제)

select *

  from g5_login_log

 where mb_id in (select mb_id from g5_member where mb_nick = '%[검색어]%')

답변에 대한 댓글 5개

힌트 감사합니다. ^^
근데, 제가 초보라 위에 적어주신 코드를 어떻게 응용해야 할지 감이 잘 ^^;;

적어주신 코드 부분이 bbs/login_log.php 파일의 아래 코드와 관계 있어 보이는데,,,
혹시, 아래 코드 부분을 어떤 식으로 변형하면 될까요?


$sql_from = " FROM ".$g5['login_log_table'];
$sql_common = " WHERE (1) ";
if($is_admin)
{
$sfl = $sfl?$sfl:"mb_id";
if($stx)
$sql_common .= " AND ".$sfl." LIKE '%".$stx."%' ";
else
$sql_common .= "";
}
else
$sql_common .= " AND mb_id = '".$member['mb_id']."' ";
2017-10-07 (토) 18:12:03
참고 코드입니다.

$sfl 값이 mb_nick 인 경우, 특별처리를 해주시면 됩니다.

[code]
if($is_admin)
{
$sfl = $sfl?$sfl:"mb_id";
if ($sfl == "mb_nick") {
$sql_common .= " AND mb_id in (select mb_id from {g5['member_table']} where ".$sfl." LIKE '%".$stx."%') ";
} else {
if($stx)
$sql_common .= " AND ".$sfl." LIKE '%".$stx."%' ";
else
$sql_common .= "";
}

}
[/code]
알려주신 방법대로 해봤는데, 검색이 안 되네요. ^^;

제가 수정한 내역은 아래와 같아요.


1.
알려주신 부분을 위 코드로 변경

[code]
if($is_admin)
{
$sfl = $sfl?$sfl:"mb_id";
if ($sfl == "mb_nick") {
$sql_common .= " AND mb_id in (select mb_id from {g5['member_table']} where ".$sfl." LIKE '%".$stx."%') ";
} else {
if($stx)
$sql_common .= " AND ".$sfl." LIKE '%".$stx."%' ";
else
$sql_common .= "";
}

}
[/code]



2.
검색 옵션 추가
[code]
<select name="sfl" id="sfl">
<option value="mb_nick" <?php echo get_selected($_GET['sfl'], "mb_nick") ?>>회원닉네임</option>
<option value="mb_id" <?php echo get_selected($_GET['sfl'], "mb_id") ?>>회원아이디</option>
</select>
[/code]
2017-10-08 (일) 17:15:04
특별히 문제될만한 부분은 없어 보입니다.

닉네임 검색시의 SQL 문이 기대한 되로 만들어졌는지를 확인하고, (echo $sql)

해당 SQL 문을 직접 DB 에서 실행해보면서 디버깅을 해볼 수 있을 듯 합니다. (phpmyadmin 등)
아직 성공하진 못 했지만, 관심 갖고 답변 달아주셔서 정말 고맙습니다.

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