2013-05-08 13 views
-2

두 개의 테이블이 있습니다.동시에 뉴스 및 의견 받기

뉴스

news_id | header | text

news_comments

comment_id | comment | date | fk_news_id

현재 난 그냥 뉴스를 당깁니다. 그러나 나는 주석도 가져오고 싶지만, 단일 쿼리를 만들 수 있는지, 아니면 먼저 뉴스를 가져와야하는지에 대해서는 잘 모르겠다.

두 방법 모두 가능한 경우 더 좋은 방법은 무엇입니까?

+0

내부 결합을 사용하지 않는 이유는 무엇입니까? –

+0

그런 식으로하면 각 의견에 대한 뉴스 항목이 생성됩니다. 뉴스 항목에 3 개의 의견이 있으면 해당 항목이 결과에서 데이터베이스에서 3 번 꺼내집니다 –

+0

rdbms는 무엇입니까? –

답변

2

...

SELECT 'N' AS type, news_id, header, text, NULL AS date 
FROM news 
UNION 
SELECT 'C' AS type, fk_news_id AS news_id, NULL AS header, comment AS text, date 
FROM comments 
ORDER BY news_id, type desc 

이 당신에게 하나의 결과 집합을 제공 할 수 있지만,이 경우 다른 열 이름을 고려해야한다 결과에서 의견 데이터를 검색하십시오.

+0

비슷한 수의 적은 수의 열에 대해서는 상당히 실용적입니다. 모든 컬럼이 이미 구분되어 있다는 것을 알기 때문에'UNION ALL'을 고려할 수도 있습니다 –

2

사용 INNER JOIN

SELECT a.*, b.* 
FROM news a 
     INNER JOIN news_comments b 
      ON a.news_ID = b.fk_news_id 
ORDER BY a.news_ID, b.comment_ID 

더 조인에 대해 친절하게 아래 링크를 방문하여 더 많은 지식을 얻을 수 :

문 위에 만에이 news을 반환을 적어도 하나의 덧글, 의견없이 모든 뉴스를 반환하려면을 사용하십시오.. 그게 당신이 생각하고있는 것입니다 만약 내가 정확히 모르는

SELECT a.*, b.* 
FROM news a 
     LEFT JOIN news_comments b 
      ON a.news_ID = b.fk_news_id 
ORDER BY a.news_ID, b.comment_ID 
+0

이렇게하면 각 댓글에 대한 뉴스 항목이 생성됩니다. 뉴스 항목에 3 개의 댓글이있는 경우 해당 항목은 결과에서 데이터베이스에서 3 번 꺼내집니다 –

+0

불행히도 예, 어떻게 의견을 표시 하시겠습니까? 또는 응용 프로그램 수준에서 형식을 지정하지 않는 이유는 무엇입니까? –

+0

나는 그것을 할 수있다. 그러나 정말로 뉴스가 풀린 후에 독자적으로 의견을 끌어내는 것보다 효율적인가? –