게시판 리스트에서 중복은 제거하고 출력 하는 방법
본문
게시글마다 wr_1에 데이터가 들어가 있어요..
게시물중에 wr_1의 값이 중복되는 게시물(제목은 다름)은 최근걸로 하나만 출력하고 싶습니다.
어떻게 코드를 만져야 할까요 ㅠㅠ
답변 4
bbs/list.php 에서 뿐만 아니라 어느곳에서 해도 상당히 복잡합니다
대상게시판도 따로 있을 것이고 검색 코드, 하단 페이징 만들기, 전체 게시물수, 공지사항 등
고려사항이 많아서 list.php에 distinct나 group by 넣어서 한줄로 해결될 문제가 아닙니다
===================================
간단한 방법으로는
해당 게시판 스킨 list.skin.php 상단에서
출력할 wr_1에 해당하는 레코드 wr_2에 'OK' 넣는 코드를 만들어서 리스트를 열어본 후 코드삭제
write_update.skin.php 를 만들고
if(!$w){
1. 신규등록 wr_1값과 같은 기존 wr_1의 wr_2 값 제거 코드
2. 방금등록한 게시물 wr_2에 'OK' 넣는 코드
}
list.php 상단에서 아래 코드만 추가하면 됩니다
if($bo_table=='대상게시판'){ $sfl='wr_2'; $stx='OK'; }
https://github.com/gnuboard/gnuboard5/blob/master/bbs/list.php
에서 SELECT 절에 필드 재 나열, DISTINCT 키워드 또는 GROUP BY 키워드를 추가해 볼수 있는데
문제는 데이터가 많아질수록 성능이 더 떨어집니다.
대안으로는 중복데이터를 주기적으로 삭제하는 스케줄링을 하거나
별도 테이블에 중복데이터가 없도록 따로 관리하는 방법이 있습니다.
어디서 사용하시느냐에 따라서 다를듯 합니다.
게시판 리스트에서 하시면 작업이 좀 복잡할듯 하고요.
그외에 출력하시는거라면 distinct 로 중복을 제거하시면 됩니다.
<?php
// 게시물 데이터가 있는 배열 (예시)
$posts = [
["title" => "게시물 1", "wr_1" => 100, "date" => "2023-10-01"],
["title" => "게시물 2", "wr_1" => 200, "date" => "2023-10-02"],
["title" => "게시물 3", "wr_1" => 100, "date" => "2023-10-03"],
["title" => "게시물 4", "wr_1" => 300, "date" => "2023-10-04"],
];
// 중복된 wr_1 값을 저장할 배열
$seenWr1 = [];
// 최근 게시물을 저장할 배열
$latestPosts = [];
// 게시물을 순회하면서 중복된 wr_1 값을 처리
foreach (array_reverse($posts) as $post) {
$wr1 = $post["wr_1"];
if (!in_array($wr1, $seenWr1)) {
$seenWr1[] = $wr1;
$latestPosts[$wr1] = $post;
}
}
// 최근 게시물 출력
foreach ($latestPosts as $wr1 => $post) {
echo "게시물 제목: " . $post["title"] . ", wr_1 값: " . $wr1 . ", 날짜: " . $post["date"] . "\n";
}
?>
이 코드를 응용 하라네요.
!-->