전체게시판의 여분필드 최대값 관련입니다.
본문
wr_1의 최대값을 전체게시판과 비교해서 가져오려고 하는데요 쿼리문을 어떻게 짜야할지
답이 안나오고 몇시간째 찾아다니다 여기다 글을 올립니다!
제가 시도해 본게,
$sql = " SELECT MAX(wr_1) FROM g5_board ";
$sql = " SELECT MAX(wr_1) FROM $write_table "; <--이건 해당 게시판 최대값만 가져오더군요;;
$sql = " SELECT MAX(wr_1) FROM $g5_board_001 AND $g5_board_002 AND $g5_board_003 ";
등등 입니다!! FROM 다음에 뭔가 있을 것 같은데 잘 안보이네요 ㅠ.ㅜ 도움 부탁드립니다!
답변 3
$sql = "select * from g5_board ";
$result = sql_fetch($sql);
$sql2 = "";
while($row = sql_fetch_array($result)) {
if ($sql2 ) .= "union all ";
$sql2 .= "select max(wr_1) maxwr1, {$row[bo_table]} tablename from g5_write_{$row[bo_table]} ";
}
$result2 = sql_query($sql2);
while($row2 = sql_fetch_array($result2)) {
echo $row2[maxwr1]." - ".$row2[tablename]."<br/>";
}
이정도면 나머지는 구현가능하시죠?
!-->해당 기능을 구현하려면 단순하게
'g5_' 접두어를 가진 테이블 중 wr_1 필드를 가진 테이블들에 대해 순회하면서 비교하거나
서브쿼리 묶음으로 처리할수는 있겠지만,
후에 성능을 생각하면 올바르지 않은 방법이고
wr_1 의 max 값을 위한 별도의 테이블 하나를 구성 후
각 wr_1 필드를 가진 테이블이 insert / update 될 때에
트리거 혹은 프로그램단 에서
$newval = $_REQUEST['wr_1_max'];
$query = "UPDATE 별도테이블 SET wr_1_max = (CASE WHEN wr_1_max < {$newval} THEN {$newval} ELSE wr_1_max) WHERE ...";
이러한 형태로 구성하면 후에는 별도테이블의 wr_1_max 값만 가지고 오면 되는 형태가 됩니다.
!-->정성껏 달아주신 분의 예제처럼 $변수 앞뒤로 {}를 달아주세요. 웬만하면 변수인줄 인터프리터가 알기는 하지만, 그래도 전반적 코드의 오류를 줄이고, 읽기 좋고, 속도를 향상시키려면 그렇게 하라고 합니다.
<? ?> 이것도 쓰지 말고 <?php ?>를 쓰라고 하는데, 이거 참 잘안되더군요. 그래도 해야겠죠...
그리고 한 때 php3,4 쓸 때 $_REQUEST나 $_POST, $_GET 안쓰고도 폼변수, 링크로 변수가 잘 넘어왔기에 그냥 $변수 사용했는데, 보안문제로 변수 오염문제를 막기 위해 꼭 써두도록 하구요.
그냥 지나가다가... 긁적 긁적...