2015-07-15 2 views
0

Я хотел бы создать страницу администрирования для своего сайта, где я мог бы использовать несколько флажков для хранения/обновления многих категорий для одного сообщения. Так я создал три таблицы:Как создать администратора с несколькими категориями в PHP и MySQL?

POST Table (id (index, auto-increment, not null), subject, content) 

CATEGORIES Table (id (index, auto-increment, not null), name) 

POST_CATEGORIES Table (id (index, auto-increment, not null), id_cat (foreign key to CATEGORIES.id), id_post (foreign key to POST.id)) 

(. Эта последняя таблица выстраивания отношений между стойками и его категориями)

Так что я пытаюсь перечислить категории с несколькими флажками. Я делаю этот запрос, но он не работает, как ожидалось:

$select = $db->query('SELECT categories.id, categories.name, post_categories.id_cat AS fk_cat, post_categories.id_post AS fk_post, post.id AS post_id 
    FROM `categories` 
    LEFT JOIN post_categories 
     ON categories.id = id_cat 
    LEFT JOIN posts 
     ON post.id = id_post'); 

Результата у меня есть список категорий, но каждое название категории повторяется в зависимости от количества сообщений, имеющих эту категория (например: если пост 1 и 2-й категории имеют обе категории 1, категория 1 будет отображаться 2 раза в моем списке).

EDIT: Спасибо за ответы, вот sqlfiddle, чтобы увидеть, что происходит ... http://sqlfiddle.com/#!9/4c304/1

(я пытаюсь отобразить список категорий не будет выбрать * из. категории таблицы, потому что в следующем шаге, я хотел бы правильные категории, которые будут проверены, когда я редактировать сообщение.)

+1

Хороший способ задать такие вопросы - подготовить [SQL Fiddle] (http://sqlfiddle.com/), чтобы читатели могли видеть, что проблема заключается в том, что при добавлении детали в вопрос, как вы это делали). Возможность визуализации проблемы очень полезна. – halfer

ответ

1
SELECT DISTINCT c.id 
       , c.name 
       , p.id post_id 
      FROM categories c 
      LEFT 
      JOIN post_categories pc 
      ON c.id = pc.id_cat 
      LEFT 
      JOIN posts p 
      ON p.id = pc.id_post 
+0

Спасибо, но, к сожалению, она дает те же проблемы: http://sqlfiddle.com/#!9/4c304/4 – Nicks

0

Если я использую GROUP BY categories.id, я не двойники больше ...

Но он сохраняет только первое сообщение, которое «помечено» текущей категорией. Мне нужно сохранить все эти сведения.

Может быть, я должен фильтровать по запросу php? Что-то вроде, если count (category.id> 1), то отображает только тот, где post_id = текущее редактирование сообщения? (извините, если это не ясно, я немного смущаюсь :()

Смежные вопросы