2개 쿼리문을 한개로 불러오고 싶습니다
본문
DB에 a_fruit 필드 fruit 하고 b_fruit 필드 fruit 를 불러오고 같은 값만 나열하고 싶은데 잘 안됩니다..
A 쿼리문
$sql = " SELECT * FROM a_fruit WHERE bo_table='".$bo_table."' ORDER BY fruit LIMIT 10 ";
$row= sql_query($sql);
b 쿼리문
$sql = " SELECT * FROM b_fruit WHERE bo_table='".$bo_table."' ORDER BY fruit LIMIT 10 ";
$row= sql_query($sql);
이거를
$sql = "
SELECT B.fruit, A.*
FROM a_fruit A
left outer join (select * from b_fruit WHERE bo_table='".$bo_table."') B on A.idx = B.idx
WHERE bo_table='".$bo_table."'
ORDER BY fruit
LIMIT 10 ";
$gresult = sql_query($sql);
이렇게 하였지만 적용이 안됩니다..어디부분이 잘못되었는지 모르겠습니다..
답변 8
복잡하게 하실꺼 없을꺼 같은데요
union 만 사용하시면 해결됩니다.제가 맞는건지 모르겠지만
요렇게 하면 a_fruit의 fruit와 b_fruit의 fruit를 를 맞치 하나의 테이블에서 가기고 오는 fruit처럼 됩니다.
만일 이걸 구분하고 자 하고 싶면 컬럼을 하나 더 만들어서 이니셜을 넣어주셔도될구요
LIMIT 10 가로 밖에 쓰셔도 되는데 안쪽에 넣는게 더 퍼퍼먼스가 나올꺼 같네요
SELECT * FROM (
SELECT fruit FROM a_fruit WHERE bo_table='".$bo_table."' ORDER BY fruit LIMIT 10
UNION ALL
SELECT fruit FROM b_fruit WHERE bo_table='".$bo_table."' ORDER BY fruit LIMIT 10
) AS aa
요렇게 한번 활용해보시기 바랍니다.
!-->
UNION ALL로 하시되 그누보드에서 제공하는 함수는 UNION ALL을 필터링하기에 사용하시면 안 됩니다.
$query = mysqli_query("SELECT ~~~~");
while($rows = mysqli_fetch_assoc($query)) {
}
a_fruit 와 b_fruit 의 구조가 동일한것이 일단 걸림돌로 보여지고
해당 테이블들에
"bo_table"이 존재하나요?
그누보드의 게시판을 활용한 테이블이라면
bo_table은 where절에 존재해야 할 대상이 아니고
board_new 혹은 board 와 같은 형태를 조회하시는거라면
union이 필요없겟으나
두개의 테이블을 혼합하려는것으로 보아
개별로 만들어둔 속성에 관련된 테이블같은데
개별적으로 구성하신 테이블이라면
구조를 알려주셔야 union 을 처리하는 방법을 고민해드릴수있을것 같습니다.
UNION ALL 연결 구문 쿼리에서 order by를 빼고 외부 쿼리로 옮겨서 사용해보세요. 버전에 따라 LIMIT 구문도 내부 쿼리에서 동작이 되지 않을 수 있습니다. MySQL 레퍼런스 문서 확인 결과 https://dev.mysql.com/doc/refman/8.0/en/union.html 각 쿼리 order by를 적용 하려는 경우$sql = "SELECT * FROM ( SELECT fruit FROM a_fruit WHERE bo_table='".$bo_table."' LIMIT 10 UNION ALL SELECT fruit FROM b_fruit WHERE bo_table='".$bo_table."' LIMIT 10 ) AS aa order by aa.fruit" ;
union all의 쿼리들을 소괄호로 감싸서 하라네요.select * from ( (select wr_name from a order by wr_name limit 5) union all (select wr_name from a order by wr_name limit 5) ) as aa
맞습니다. 왕계란님의 답변처럼 그누보드에서 사용되는 함수에서는
필터링되어 사용되지 않으니 해당 함수를 복사하여 이름을 바꾸어서 사용하셔야합니다.
위에 추가로 올려주신예제에서 보면
연결고리가 명확하지 않습니다.
a_fruit 에는
idx, title, bo_table , thumb, fruit
b_fruit에존재하는
idx는 개별인지, foriegn key 인지, b_furit 테이블의 primary key 인지 판단이 모호합니다.
title, sca 는 타이틀과 카테고리 로 인식됩니다
bo_table은 같은것을 인식할테구요
thumb은 썸네일 같고
fruit 는 이미지명 같은데
서로간의 연결고리가 테이블 말고는 없기때문에
다대다 조합으로 밖에는 안됩니다.
그래도 b_fruit 의 idx 가 foriegn key 라고 가정하고
추출을 하려면
select
a.idx,
a.title,
a.bo_table,
a.thumb,
a.fruit as main_img,
b.title as btitle,
b.sca,
b.thumb as subthumb,
b.fruit as sub_img
from a_fruit a
left outer join b_fruit b on (a.idx = b.idx and a.bo_table = b.bo_table )
limit 10
order by a.fruit asc
와 같이하면 b 에 해당되는 내용이 없는경우 a 만 추출됩니다.
위 쿼리를 수행해본것이 아니기때문에
문법 오류가 있을수도있습니다.
개념만 참고하세요
와 같이 하면 될듯 싶습니다.
아우터 조인으로 sub가 없는것도 추출하려면
1개의 칼럼을 사용해서 같은 과일 이미지끼리 나열을 하였습니다
그러나 해당 이미지에 대표이미지를 불러와서 같은 과일끼리 나열
하는게 좀더 좋을꺼 같아서 작업중에 있으나 잘 안되고있습니다
예)(수박)a_fruit | (수박)b_fruit | (수박)b_fruit | (복숭아)a_fruit | (복숭아)b_fruit | (복숭아)b_fruit
a_fruit
idx, title, bo_table, thumb, fruit <-- 대표이미지
b_fruit
idx, title, sca, bo_table, thumb, fruit <-- 서브이미지
현제 저렇게 되어있고 작업중에 있습니다
친절하게 답변 달아주신분들 감사합니다
제 마음은 다 채택 드리고 싶지만 어쩔수없이 제일먼저 댓글 달아주신 복스리님을 채택했습니다
플래토님의 조언 감사드립니다 디비 문제였습니다..ㅠ