2013-09-07 2 views
-2

두 쿼리를 어떻게 하나로 결합 할 수 있습니까?다른 테이블에서 두 개의 쿼리를 결합하십시오.

첫 번째 쿼리는 특정 카테고리의 모든 posts_id를 가져옵니다. post_category 테이블에서 postId는

select distinct postId 
    from post_category 
    where categoryId='125' or categoryId='3' 

그때 나는 그것이 포스트 테이블

SELECT * FROM post <<query one join>> AND approve=1" 

+--------------+-----------------------+------+-----+---------------------+----------------+ 
    | Field  | Type     | Null | Key | Default    | Extra   | 
    +--------------+-----------------------+------+-----+---------------------+----------------+ 
    | id   | int(11)    | NO | PRI | NULL    | auto_increment | 
    | autor  | varchar(40)   | NO | MUL |      |    | 
    | date   | datetime    | NO | MUL | 0000-00-00 00:00:00 |    | 
    | short_story | text     | NO | MUL | NULL    |    | 
    | full_story | text     | NO | MUL | NULL    |    | 
    | xfields  | text     | NO |  | NULL    |    | 
    | title  | varchar(255)   | NO | MUL |      |    | 
    | descr  | varchar(200)   | NO | MUL |      |    | 
    | keywords  | text     | NO |  | NULL    |    | 
    | category  | varchar(200)   | NO | MUL | 0     |    | 
    | alt_name  | varchar(200)   | NO | MUL |      |    | 
    | comm_num  | mediumint(8) unsigned | NO | MUL | 0     |    | 
    | allow_comm | tinyint(1)   | NO |  | 1     |    | 
    | allow_main | tinyint(1) unsigned | NO | MUL | 1     |    | 
    | approve  | tinyint(1)   | NO | MUL | 0     |    | 
    | fixed  | tinyint(1)   | NO |  | 0     |    | 
    | allow_br  | tinyint(1)   | NO |  | 1     |    | 
    | symbol  | varchar(3)   | NO | MUL |      |    | 
    | tags   | varchar(255)   | NO | MUL |      |    | 
    | metatitle | varchar(255)   | NO |  |      |    | 
    | FileTempUUID | varchar(11)   | YES |  | NULL    |    | 
    +--------------+-----------------------+------+-----+---------------------+----------------+ 

post_category에 post_category에서 모든 postId을 선택 있도록 그들과 합류 할 후 테이블에 ID 같음 ;

+------------+-------------+------+-----+---------+----------------+ 
| Field  | Type  | Null | Key | Default | Extra   | 
+------------+-------------+------+-----+---------+----------------+ 
| cid  | bigint(11) | NO | PRI | NULL | auto_increment | 
| postId  | int(11)  | NO |  | NULL |    | 
| categoryId | smallint(6) | NO |  | NULL |    | 
+------------+-------------+------+-----+---------+----------------+ 
+1

'{$에 가입}'의 가치는 무엇입니까? – Fluffeh

+0

db 구조를 모를 때까지는 추측하기가 어렵습니다. –

+0

PHP를 SQL과 분리하십시오 (예 : * SQL * 및 관계 구조 만 표시). PHP가이 SQL을 어떻게 생성하는지 SQL이 조인을 수행하는 방법과는 무관합니다 (잘못 생성 한 경우 코드의 버그 일 뿐이며 SQL 또는 조인과 관련이 없습니다). 그래서, 결국 : * 실제 SQL [실행 예정] *을 표시하십시오. – user2246674

답변

1

이 가입하십시오 :

SELECT 
    p.* 
FROM 
    post p 
LEFT OUTER JOIN post_category c ON (c.postId = p.id) 
WHERE 
    c.categoryId IN (125,3) AND p.approve=1 
GROUP BY p.id 

필요한 경우 또한, 별개의 게시물에 GROUP BY p.id를 사용하여. 이 그것을해야처럼

+0

왜 당신이 옳은가요? –

+0

@hallaji 전 왼쪽에 있어야한다고 생각합니다. 모든 게시물을 반환하려면 가입하십시오. –

+0

@ShadyAtef 네 말이 맞아. 나는 대답을 업데이트했다. – hallaji

0

나는 변수는 {$에 가입}이 완전히 틀리다 문자열을 의미한다,라는 특별한 키워드가 SQL에 가입하고, 내가 유

을 원하는 추측 일을 할 수있는 SQL 문을 작성 단단하게하려고하지 않을 생각
$sql = "Select a.postId, a.categoryId, b.* from post_category a, post b where a.postId = b.id and (a.categoryId='125' or a.categoryId='3') 

@Edit 는 내가 통해 UR 코드가 완전히 잘못된 SQL 문

어느이

SELECT * FROM post select distinct postId 
    from post_category 
    where categoryId='125' or categoryId='3' AND approve=1" 

초래 의견을 이해하면 당신의 테이블 스키마로

0

뭔가 :

SELECT DISTINCT postId post.* FROM post_category 
LEFT JOIN post ON post_category.postId = post.id 
WHERE (categoryId='125' OR categoryId='3') AND post.approve = 1 
관련 문제