같은 구조의 두 개의 테이블에서 특정 컬럼의 중복을 제외한 값을 출력시키고 싶습니다. 채택완료
안녕하세요.
table_A, table_B의 두 개의 테이블(구조및 컬럼명이 동일한 테이블)에서 특정 컬럼의 중복을 제외한 컬럼의 값을 출력시키고 싶은데 잘 안되서요. ㅠ
일단 출력 시키고자 하는 게 특정월에 중복을 제외한 'ID의 수'와 'ID' 값인데요.
</strong></p>
<p>$sql = "SELECT COUNT(mb_id) AS cnt FROM (
SELECT mb_id FROM table_A WHERE datetime like '2024-01%'
UNION
SELECT mb_id FROM table_B WHERE datetime like '2024-01%'
) AS tscount ":</p>
<p> </p>
<p>$monthly = sql_fetch($sql);</p>
<p><strong>
갯수는 위와 같이 UNION을 사용하여 중복제외 값을 얻었는데,
그누보드는 sql_query()에서 UNION을 지원하지 않아서 값을 따로 못뽑고 있습니다.ㅠㅠ
FULL JOIN을 사용하려 했는데 이건 또 저희 DB가 mysql을 사용하고 있어서 지원을 안하고...
그누보드 에서 막은 UNION관련 코드를 건드리고 싶지는 않구요.
mysql_query(), mysql_fetch_array() 이거로 UNION을 써봤는데 이거도 안먹히더라구요
머리가 안돌아가는 건지.. 서브쿼리등의 여러가지 방법을 생각해봐도 답이 잘 안나와서요.
</strong></p>
<p>$sql = " SELECT mb_id FROM table_A WHERE apply_datetime like '2024-01%'
UNION
SELECT mb_id FROM table_B WHERE apply_datetime like '2024-01%' ";</p>
<p> </p>
<p>$monthly = sql_query($sql);</p>
<p><strong>
위의 쿼리랑 같은 결과가 나올 수 있게 UNION이나 FULL JOIN 없는 쿼리를 어떻게 만드는지
몇 시간 동안 헤매고 있는 이 초보에게 알려주시면 너무너무 감사하겠습니다. ㅠㅠ
답변 2개
보니까 주석처리에서 유니온 사용 허락을 안한다고 하네요
일단 유니온을 쓰려면 common.php 에서 1486번째줄에서 sql_query 함수가 있구요 거기 내부에 보면 아래 소스코드 주석처리 하면 될것 같아요
</p>
<p>// union의 사용을 허락하지 않습니다.</p>
<p>//$sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);</p>
<p>// $sql = preg_replace("#^select.*from.*[\s\(]+union[\s\)]+.*#i ", "select 1", $sql); << 이부분 주석처리 </p>
<p>
답변에 대한 댓글 5개
유저도 사용해야되나요?
if($flag) $sql = preg_replace("#^select.*from.*[\s\(]+union[\s\)]+.*#i ", "select 1", $sql);
이렇게 하면 사용하고 싶을때 이거 지정하면되구요
시간내서 답변주셔서 너무 감사드립니다.~^^
댓글을 작성하려면 로그인이 필요합니다.
</p>
<p>$tblarr = ['table_A', 'table_B'];
$rows = [];</p>
<p> </p>
<p>foreach ($tblarr as $tbl) {
$sql = " SELECT DISTINCT mb_id FROM {$tbl} WHERE apply_datetime like '2024-01%' ";
$monthly = sql_query($sql);</p>
<p> </p>
<p> while ($row = sql_fetch_array($monthly)) {
$rows[] = $row['mb_id'];
}
}</p>
<p> </p>
<p>$rows = array_unique($rows);
print_r2($rows);</p>
<p>
답변에 대한 댓글 1개
만들어주신 소스를 적용해보니 해당 페이지 접근 시에 모레시계가 계속 돌아서 사용이 어려울 것 같습니다.ㅠ
인덱스를 해주면 될 거 같긴 한데 해당 DB를 다른 서비스에서도 사용하다 보니 다른 서비스에 영향이 갈 거 같긴해서요~(인덱스 해본적은 있는데 정확하게 어떤 로직인지 잘몰라서요^^;)
그래도 만들어주신 소스같은 방법도 있구나를 배웠습니다. 나중에 비슷한 상황에서 다시 활용해보겠습니다.
감사합니다!!
댓글을 작성하려면 로그인이 필요합니다.
답변을 작성하려면 로그인이 필요합니다.
로그인