与MySQL表复杂的M:N关系

时间:2013-03-11 17:41:28

标签: mysql sql

我有以下表格:

:新闻
字段:uid,标题,类别,日期时间,隐藏,已删除

:categories_mn
字段:uid_local,uid_foreign

:类别
字段:uid,parentcategory,name,image

每个新闻条目都可以分配到几个不同的类别。

我想要获得的是获取最新的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 个答案:

答案 0 :(得分: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;

答案 1 :(得分:0)

我认为您不需要新闻表中的类别列。 我认为这个查询应该有效:

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

我还要重命名categories_mn中的列,以便更清楚哪个列引用哪个表。也许uid_newsuid_categories是好名字,也有助于更好地理解m:n关系......