как создать таблицу со связью многие ко многим?

FRIE

Новичок
как создать таблицу со связью многие ко многим?

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

животные страны

голуби россия, украина, казахстан
дятлы россия, украина, казахстан

как реализовать колонку со странами? я пробовал ENUM но он дает выбрать только одно из забитых значений =(
 

Adelf

Administrator
Команда форума
В стандартном случае так:
таблица животных
таблица стран
таблица связи животное-страна. там будет два поля. Id животного и id страны.
 

DIG

Новичок
Партнер клуба
Тут тебе понядобятся три таблицы.

1. таблица с животными
2. Таблица со странами
3. Таблица связей Страны<->Животные
 

HEm

Сетевой бобер
делаешь отдельную таблицу со связями
например

животные:
id name
1 дятел
2 голубь
3 олень
4 алтайский суслик

страны:
id name
1 россия
2 украина
3 казахстан

животные_и_страны
zh_id st_id
1 1
1 2
1 3
2 1
2 2
2 3
3 1
4 1
4 3
 

DIG

Новичок
Партнер клуба
Adelf
У дураков время сходится...
Мы пост минута-в-минутут одновременно написали :)

Антиофтоп: потом чтобы выбрать всех животных принадлежащих определенной стране используй LEFT(RIGHT) JOIN.
 

FRIE

Новичок
и тогда получается надо делать так

1 табла страны

id страна

1 россия
2 украина
3 казахстан

2 табла животные

id животные
1 дятлы
2 голуби

3 табла связи

id страны животные

1 1 1
2 1 2
3 2 1
4 2 2
5 3 1
6 3 2


так? или может прощще как то сделать можно?
 

HEm

Сетевой бобер
в таблице связи свой id необязателен по идее

-~{}~ 07.12.09 15:42:

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

FRIE

Новичок
Автор оригинала: DIG
Adelf
У дураков время сходится...
Мы пост минута-в-минутут одновременно написали :)

Антиофтоп: потом чтобы выбрать всех животных принадлежащих определенной стране используй LEFT(RIGHT) JOIN.
LEFT(RIGHT) JOIN сдесь не применим как мне кажется, он же для связи 1 к 1, или это не так?

-~{}~ 07.12.09 18:38:

приведите пожалуйста пример кода php для выборки из базы животных кот которые находятся в россии из вот таких таблиц



1 табла strana


id country

1 россия
2 украина
3 казахстан

2 табла animals

id birds

1 дятлы
2 голуби


3 табла связи

id-----country_id-----birds_id

1-------1-------------1
2-------1-------------2
3-------2 ------------1
4-------2 ------------2
5 ------3 ------------1
6 ------3 ------------2
 

Beavis

Banned
FRIE
связь многие-ко-многим это как бы две связи многие-к-одному, так что надо два раза использовать JOIN
Если ты хотя бы примерно понимаешь что из себя представляет оператор JOIN то ты без труда сам составишь запрос
 

FRIE

Новичок
Автор оригинала: Beavis
FRIE
связь многие-ко-многим это как бы две связи многие-к-одному, так что надо два раза использовать JOIN
Если ты хотя бы примерно понимаешь что из себя представляет оператор JOIN то ты без труда сам составишь запрос
я не представляю что такое JOIN и как он работает, приведите пожалуйста пример на моих таблицах если не трудно . (факи читал, не понял нихрена )
 

FRIE

Новичок
это всё примеры связей один к одному , Антон Поддержка , Борис Поддержка, Юрий Логистика.
а в моём случае одно животное может находиться в разных странах и в одной стране могут находиться многие животные
я хочу сделать поиск по сайту, например выбираю страну и мне выводится список животных которые там живут
 

baev

‹°°¬•
Команда форума
выбираю страну и мне выводится список животных которые там живут
—и в чём проблема? Тут и JOIN не нужен — достаточно WHERE по country_id'у…
 

FRIE

Новичок
Автор оригинала: baev
—и в чём проблема? Тут и JOIN не нужен — достаточно WHERE по country_id'у…
тогда у меня будет около 70 столбцов, это номально будет работать при больших нагрузках??
 

FRIE

Новичок
Автор оригинала: baev
— откуда «около 70 столбцов»?
к примеру 70 стран и 1000 видов животных, на сколько я понял если использовать WHERE то таблица должна состоять из колонок со странами в которые записываются животные. наверно я чего-то не догоняю... а как бы вы решили такую задачу?
 

Beavis

Banned
Автор оригинала: FRIE
я не представляю что такое JOIN и как он работает, приведите пожалуйста пример на моих таблицах если не трудно . (факи читал, не понял нихрена )
когда я первый раз их читал то понял... значит ты просто не хотел понять)
я тебе сказал что надо использовать два джойна.. пробуй
 

baev

‹°°¬•
Команда форума
таблица должна состоять из колонок со странами в которые записываются животные. наверно я чего-то не догоняю...
Вот это:
3 табла связи

id-----country_id-----birds_id

1-------1-------------1
2-------1-------------2
3-------2 ------------1
4-------2 ------------2
5 ------3 ------------1
6 ------3 ------------2
— кто писал?

Вы не можете по этой таблице сделать выборку по country_id?
Или приджойнить назвния птиц по birds_id не можете?
 

Beavis

Banned
baev
просто ты сказал что можно выбрать всех птиц из страны без джойна, а т.к. без джойна это сделать проблематично он тебя и не может понять
 
Сверху