같은 구조의 두 개의 테이블에서 특정 컬럼의 중복을 제외한 값을 출력시키고 싶습니다.
본문
안녕하세요.
table_A, table_B의 두 개의 테이블(구조및 컬럼명이 동일한 테이블)에서 특정 컬럼의 중복을 제외한 컬럼의 값을 출력시키고 싶은데 잘 안되서요. ㅠ
일단 출력 시키고자 하는 게 특정월에 중복을 제외한 'ID의 수'와 'ID' 값인데요.
$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 ":
$monthly = sql_fetch($sql);
갯수는 위와 같이 UNION을 사용하여 중복제외 값을 얻었는데,
그누보드는 sql_query()에서 UNION을 지원하지 않아서 값을 따로 못뽑고 있습니다.ㅠㅠ
FULL JOIN을 사용하려 했는데 이건 또 저희 DB가 mysql을 사용하고 있어서 지원을 안하고...
그누보드 에서 막은 UNION관련 코드를 건드리고 싶지는 않구요.
mysql_query(), mysql_fetch_array() 이거로 UNION을 써봤는데 이거도 안먹히더라구요
머리가 안돌아가는 건지.. 서브쿼리등의 여러가지 방법을 생각해봐도 답이 잘 안나와서요.
$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%' ";
$monthly = sql_query($sql);
위의 쿼리랑 같은 결과가 나올 수 있게 UNION이나 FULL JOIN 없는 쿼리를 어떻게 만드는지
몇 시간 동안 헤매고 있는 이 초보에게 알려주시면 너무너무 감사하겠습니다. ㅠㅠ
!-->!-->답변 2
보니까 주석처리에서 유니온 사용 허락을 안한다고 하네요
일단 유니온을 쓰려면 common.php 에서 1486번째줄에서 sql_query 함수가 있구요 거기 내부에 보면 아래 소스코드 주석처리 하면 될것 같아요
// union의 사용을 허락하지 않습니다.
//$sql = preg_replace("#^select.*from.*union.*#i", "select 1", $sql);
// $sql = preg_replace("#^select.*from.*[\s\(]+union[\s\)]+.*#i ", "select 1", $sql); << 이부분 주석처리
$tblarr = ['table_A', 'table_B'];
$rows = [];
foreach ($tblarr as $tbl) {
$sql = " SELECT DISTINCT mb_id FROM {$tbl} WHERE apply_datetime like '2024-01%' ";
$monthly = sql_query($sql);
while ($row = sql_fetch_array($monthly)) {
$rows[] = $row['mb_id'];
}
}
$rows = array_unique($rows);
print_r2($rows);
답변을 작성하시기 전에 로그인 해주세요.