mysql связь один ко многим

Автор kak2z, 23 декабря 2013, 23:18:52

« назад - далее »

0 Пользователи и 1 гость просматривают эту тему.

kak2z

в общем делаю небольшую галерейку картинок.. и вот в чем дело:
есть картинка - она относится к нескольким категориям, например - анимация, животные, кошки.

что я делаю:
1. Создаю таблицу №1 с перечнем картинок.
id(auto_inc)  | имя файла 

2. Создаю таблицу №2 с перечнем категорий
id | имя категории

2. Создаю таблицу №3 - такая себе связывающая таблица
id файла | id категории

потом допустим мне надо взять все файлы которые относятся к категориям анимация, животные, кошки

делаю запрос SELECT FROM * (таблица 1, таблица 3) WHERE таблица 3.id категории = таблица 1.IDанимация AND таблица 3.id категории = таблица 1.IDживотные AND таблица 3.id категории = таблица 1.IDкошки

получаю массив на выходе где элементы с этими значениями...
но - картинка которая относится к сразу трем категориям будет в массиве встречаться три раза..
картинка которая относится к двум категориям будет встречаться два раза..

но мне надо что бы картинка встречалась один раз, что бы при выводе не было дублирования..
я нашел вот какой вариант.

создаю массив из всех ID картинок - убираю дубли - получаю массив только с уникальными значениями..

потом прогоняю один массив внутри другого и в случае дублирования создаю вложенный массив где отображаются категории к которым относится картинка..

получаю на выходе что то такое

[ 0 ] - [ name ] => cat.gif
[ 0 ] -  [ tags ] =>array (
                    [ 0 ] => анимация
                    [ 1 ] => животные
                    [ 2 ] => кошки
       )

это нормальный вариант?? может я слишком все усложнил добавив кучу циклов?
или есть варианты более легкие и простые???
Спасибо.

П.С. Все написал упрощенно что бы не выкидывать кучу кода сюда, а что бы была просто понятна моя логика и может кто то подскажет более умное что то..
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)

GeorG

Верстка тем по шаблону, их доработка/переработка, переделка тем с версии smf 1.1 на smf 2.0. Примеры работ - insidestyle.ru
Установка модов (заточка под ваш форум); Моды под заказ; Обновление форума; Правильный перенос; Удаление/лечение вирусов; Устранения ошибок.
Обращаться в ЛС
Мой форум
Модуль анти-спама CleanTalk, сам пользуюсь
Сервера которыми сам пользуюсь - cadedic.ru

kak2z

Цитата: GeorG от 24 декабря 2013, 12:10:07
Групировать - GROUP BY

я вот пытался с GROUP BY разобраться.. но так и не понял что к чему??? если я дам пример моего рабочего запроса - поможете переделать под GROUP BY ?
Если нужно что то исправить, обновить, переставить, настроить, сделать форум заново - пишите в ЛС)