2개 쿼리문을 한개로 불러오고 싶습니다

2개 쿼리문을 한개로 불러오고 싶습니다

QA

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

 

요렇게 한번 활용해보시기 바랍니다.

 

복스리님 답변주셔서 감사합니다


$sql = "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 ";

하지만 복스리님께서 해주신데로 해보았지만..호출을 못하네요..ㅠ

안되지 않을겁니다. 테이블이나 구조를 다시한번 확인해보시기 바랍니다.
아래 회원처럼 과로는 큰 의미가 없습니다..


 SELECT fruit FROM a_fruit WHERE bo_table='".$bo_table."' ORDER BY fruit LIMIT 10
 UNION
  SELECT fruit FROM b_fruit WHERE bo_table='".$bo_table."' ORDER BY fruit LIMIT 10

요렇게 해보셔서 돌아가는지 먼저 확인해보시기 바랍니다.~

union 이 안된다는소리 일수도 있을꺼 같은에요 .혹시 mysql버전이 어떻게 되는지요?
아래 내용을 참고 바랍니다.

5Stored Procedure(5.0이상부터 지원된다고 함)
View(5.0이상부터 지원된다고 함)
Trigger(5.0이상부터 지원된다고 함)
subquery(4.1이상부터 지원된다고 함)
union, union all(4.0이상부터 지원됨)

요게 아니면 해당 테이블과 컬럼이 일치하는가 확인 하시면될듯합니다.

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 을 처리하는 방법을 고민해드릴수있을것 같습니다.


$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 연결 구문 쿼리에서 order by를 빼고 외부 쿼리로 옮겨서 사용해보세요. 버전에 따라 LIMIT 구문도 내부 쿼리에서 동작이 되지 않을 수 있습니다. MySQL 레퍼런스 문서 확인 결과 https://dev.mysql.com/doc/refman/8.0/en/union.html 각 쿼리 order by를 적용 하려는 경우

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 
union all의 쿼리들을 소괄호로 감싸서 하라네요.

맞습니다. 왕계란님의 답변처럼 그누보드에서 사용되는 함수에서는

필터링되어 사용되지 않으니 해당 함수를 복사하여 이름을 바꾸어서 사용하셔야합니다.

위에 추가로 올려주신예제에서 보면

 

연결고리가 명확하지 않습니다.

 

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 <-- 서브이미지

 

현제 저렇게 되어있고 작업중에 있습니다

친절하게 답변 달아주신분들 감사합니다 

 

제 마음은 다 채택 드리고 싶지만 어쩔수없이 제일먼저 댓글 달아주신 복스리님을 채택했습니다

 

플래토님의 조언 감사드립니다 디비 문제였습니다..ㅠ

답변을 작성하시기 전에 로그인 해주세요.
전체 128
QA 내용 검색

회원로그인

(주)에스아이알소프트 / 대표:홍석명 / (06211) 서울특별시 강남구 역삼동 707-34 한신인터밸리24 서관 1404호 / E-Mail: admin@sir.kr
사업자등록번호: 217-81-36347 / 통신판매업신고번호:2014-서울강남-02098호 / 개인정보보호책임자:김민섭(minsup@sir.kr)
© SIRSOFT