Сложное отношение M: N к таблицам MySQL

У меня есть следующие таблицы:

Таблица: новости
поля: uid, title, categories, datetime, hidden, deleted

Таблица: 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. Пожалуйста, помогите.

4
11 марта '13 в 20:41
источник поделиться
2 ответов

Я не думаю, что вам нужен столбец категорий в таблице новостей. Я думаю, что этот запрос должен работать:

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

Я бы также переименовал столбцы в category_mn, чтобы он очистил, какой столбец относится к какой таблице. Возможно, uid_news и uid_categories - хорошие имена, которые также помогают лучше понять отношение m: n...

0
02 сент. '13 в 20:38
источник
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
11 марта '13 в 20:49
источник

Посмотрите другие вопросы по меткам или Задайте вопрос