sql 출력 때문에 질문드립니다.
본문
특정조건으로 다수의 wr_id 값을 얻었습니다.
이걸 다른 게시판에 해당 wr_id 가 포함되어 있는 게시글을 모두 찾아 출력하려고 합니다.
and로 여러 개 wr_id 연결하니 출력이 제대로 안 되는데 방법이 없을까요?
include_once($board_skin_path."/sql_search.php");
$sql = " select
*
$sql_common
$sql_search
$sql_order";
$result = sql_query($sql, true);
$sql_search = "where mb_id != '' ";
foreach ($result as $key => $value) {
$sql_search .= " and wr_id = '{$value['wr_id']}' ";
}
// 출력
$sql = "select
*
from
g5_write_{$table_to}
$sql_search
order by
wr_id asc";
$result = sql_query($sql);
답변 5
AND 연산자 대신 IN 연산자를 활용해서 다음과 같이 수정해 보시면 어떨까 합니다
$wr_ids = array();
foreach ($result as $key => $value) {
$wr_ids[] = $value['wr_id'];
}
$wr_ids_str = implode(',', $wr_ids);
// 출력
$sql = "SELECT *
FROM g5_write_{$table_to}
WHERE wr_id IN ({$wr_ids_str})
ORDER BY wr_id ASC";
$result = sql_query($sql);
이렇게 했을때 특정조건으로 wr_id 값을 얻었을때 wr_id가 포함된 모든 게시글을 출력 할 수 있을 것으로 생각합니다.
!-->
$sql = "select * from $sql_common $sql_search $sql_order";
$result = sql_query($sql);
$search_id = array();
for($i=0;$row=sql_fetch_array($result);$i++) {
$search_id[] = $row['wr_id'];
}
//출력
$sql = "select * from g5_write_{$table_to} where mb_id != '' and wr_id IN (".implode(",",$search_id).") order by wr_id asc";
$result = sql_query($sql);
$search_id 의 갯수가 많아질 경우 속도는 장담을 못하겠습니다.
!-->
for($i=0;count($search_id)>$i;$i++)
{
if($i==0)
{
$where = " and (wr_id='".$search_id[$i]."' ";
}else{
$where .= " or wr_id='".$search_id[$i]."' ";
}
}
이런식으로 해도 됩니다. in보다는 속도는 빠를거에요
DB modeling에서
M:N 관계를 한번 검토해 보세요.
답변을 작성하시기 전에 로그인 해주세요.