2013-03-11 2 views
4

I가 다음과 같은 테이블 :복잡한 M : MySQL의 테이블과의 관계 N

: 뉴스
필드 : UID, 제목, 카테고리, 날짜, 숨겨진,

표를 삭제 : categories_mn
필드 : uid_local, uid_foreign

: 범주
필드 : UID, parentcategory, 이름, 이미지

모든 뉴스 항목이 여러 범주에 할당 할 수 있습니다.

무엇 임 달성하기 위해 노력하는 (할당 된 이미지 및이)이 같은

뭔가 최신 3 개 소식을 얻고,이 항목에 할당 된 모든 범주의 이미지를 표시하는 것입니다

title | catimages   | 
------------------------------ 
Post 7 | cat1.jpg   | 
Post 6 |      | 
Post 5 | cat1.jpg,cat3.jpg | 
------------------------------ 
을 이 모든입니다

지금까지 가지고

SELECT title, categories 
FROM news 
WHERE deleted = 0 AND hidden = 0 AND 
ORDER BY datetime DESC 
LIMIT 3; 

임은 매우 SQL 경험하지. 도와주세요.

+2

'categories' 필드 란 무엇입니까? 또한'uid_local'과'uid_foreign'은 무엇입니까? – Hast

+0

'categories' 필드는 M : N 관계 테이블의 uid_local입니다. 다른 필드는 categories 테이블의 uid입니다. –

+1

@Dbugger catimages를 연결하려는 경우, 즉 cat1.jpg, cat3.jpg를 얻으려면 group_concat을 사용하십시오. http://stackoverflow.com/questions/276927/can-i-concatenate-multiple-mysql-rows-into-one-field –

답변

0
select b.title, b.categories, a.image from categories a 
inner join news b 
on a.uid=b.uid 
WHERE b.deleted = 0 and b.hidden = 0 
order by a.datetime desc 
limit 3; 
+0

좋아요! 고맙습니다! –

+0

해결책으로 표시를 해제했습니다. 이것은 작동하지 않습니다. 당신이 mn 테이블의 아무 것도 사용하지 않기 때문에 처음부터 명확해야합니다. –

+0

당신은 항상 올바른 대답을 표시합니까? – Hituptony

0

뉴스 표에 카테고리 열이 필요하다고 생각하지 않습니다. 나는이 쿼리가 작동해야한다고 생각 : 그것은 어떤 테이블에 참조하는 열 명확이다 그래서 나는 또한 categories_mn의 열 이름을 바꿀 것

SELECT 
    news.title, 
    categories.image 
FROM 
    news 
    INNER JOIN categories_mn ON news.uid=categories.uid_local 
    INNER JOIN categories ON categories.uid=categories_mn.uid_foreign 
WHERE 
    news.hidden=0 AND news.deleted=0 
ORDER BY 
    datetime DESC 
LIMIT 3 

. 어쩌면 uid_newsuid_categories은 m : n 관계를 더 잘 이해하는데 도움이되는 좋은 이름입니다 ...