Автор Тема: Связь многие-ко-многим между двумя таблицами?  (Прочитано 7351 раз)

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

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Как реализовать связь многие-ко-многим между двумя таблицами?
Пример связи многие-ко-многим:
Есть таблица продуктов
products(product_id,product_name) и таблица заказов
,назовем ее accounts(number,product_id,customer_id)
number-номер заказа,customer_id-покупатель
Но ,дело в том что покупатель может в одном заказе выбрать
несколько продуктов.
Меня интересует как предусмотреть эту возможность
и как написать запрос по одному покупателю ,который бы выводил
все продукты выбранные покупателем в данном заказе.
Заранее спасибо.
С уважением Сергей

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Связь многие-ко-многим между двумя таблицами?
« Ответ #1 : 21 Февраля 2003, 00:36:47 »
Еще одну таблицу
products2orders(product_id, order_id)

Запрос примерно такой будет
SELECT p.product_name FROM products p, orders o, products2orders po WHERE po.order_id = o.order_id AND p.product_id = po.product_id AND o.order_id = $order_id

(это примерно, читай про SELECT-ы по нескольким таблицам и про JOIN)
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Связь многие-ко-многим между двумя таблицами?
« Ответ #2 : 21 Февраля 2003, 08:22:18 »
Хм...
Думаю, что можно соединить таблицы. В данном случае я думаю, подойдет
"естественное \'соединение".
Это означает, что можно устанавливать отношения на основе ее структуры , а
не содержимого базы, (неестественное соединение).
SELECT number,product_name,customer_id FROM products, accounts WHERE
customer_id=\'$login\'.
Я все правильно сделал?
Просто это одно из тестовых заданий, которые мне надо было решить. Хотелось бы услышать, правильно ли я сделал?
БД: Oracle
С уважением Сергей

Гость

  • Гость
Связь многие-ко-многим между двумя таблицами?
« Ответ #3 : 28 Февраля 2003, 14:17:29 »
SELECT p.product_name FROM products p, accounts a WHERE
a.customer_id=$login and p.number = $number

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Связь многие-ко-многим между двумя таблицами?
« Ответ #4 : 28 Февраля 2003, 22:54:26 »
Цитировать
БД: Oracle

создай представление (оно и будет аналогом 3 таблицы в mysql)
AS IS...

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
ThE0ReTiC, угу, я так уже и поступил, спасибо.
А MySQL поддерживает представления?
С уважением Сергей

Оффлайн Alexandr

  • Фанат форума
  • Ветеран
  • *****
  • Сообщений: 865
  • +0/-0
  • 0
    • Просмотр профиля
    • http://gtp.hobi.ru
Можно заказанные продукты хранить числом:
т.е. напр.:
products(product_id,product_name)
1 - ананасы
2 - бананы
3 - яблоки
Тогда
accounts(number,product_id)
1 - 1 (заказали яблоки)
2 - 5 (заказали ананасы и яблоки)
3 - 7 (заказали всё)

Но тут необходимо апдейтить таблицу accounts при вставке новых записей в таблицу products.
Kiss my CSS
Pусские gtp gp3 ( midi + tab ) -   - Все для Авто.

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Вы не совсем поняли. Возможны такие записи в таблице
accounts:
number,product_id,customer_id
1 - 19 - 17
1- 22 - 17

Т.е. number - не автоикремент.
Кстати, задача довольна интересна, т.к. виртуальные магазины работают по тому же принципу. Хотя я бы спроектировал базу по другому - но заказчик - он и в африке заказчик, к тому же, если он продвинутый.... (Бывший преподователь по базе Oracle и MsSQL). Такой проверки моих знаний мне еще ни кто не устраивал... :D
« Последнее редактирование: 01 Марта 2003, 19:12:23 от Kwazar »
С уважением Сергей

Оффлайн ThE0ReTiC

  • Главный по тарелочкам
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 4041
  • +2/-0
  • 2
    • Просмотр профиля
    • http://
Kwazar
неа... :(
AS IS...

Оффлайн win_pup

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
а заказчику разве не результат важен?

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
win_pup, да важен.
Только я по своему обыкновения стараюсь писать так, что бы скрипты шли на большинстве баз.
Например, Oracle - здорово, но если есть возможность без потери качества и скорости сделать так, что бы то же и в MySQL шло, то я делаю так, что бы шло и там и там. И только тогда, когда Oracle Дает в выполнении задачи явные преимущества - только тогда я ее и юзаю.
С уважением Сергей

Оффлайн win_pup

  • Заглянувший
  • Новичок
  • *
  • Сообщений: 18
  • +0/-0
  • 0
    • Просмотр профиля
    • http://
я имел ввиду не выбор СУБД, а то, каким образом будет реализована структура базы...
если создать таблицу-связь product_order(product_id, order_id) разве эта БД не будет работать и там и здесь?

Оффлайн Kwazar

  • Философ
  • Постоялец
  • ***
  • Сообщений: 201
  • +0/-0
  • 2
    • Просмотр профиля
    • http://www.uhuhu.ru/
Будет. Вопрос в оптимизации, интергации с другими рабочими частями.
Зачем все скручивать на проволочках? Да на них работать будет, вопрос в качестве
С уважением Сергей

Оффлайн Макс

  • vir magni ingenii
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 3534
  • +0/-0
  • 2
    • Просмотр профиля
Kwazar
Цитировать
Будет. Вопрос в оптимизации, интергации с другими рабочими частями.
Зачем все скручивать на проволочках? Да на них работать будет, вопрос в качестве


А можно как-нибудь менее абстрактно объяснить, в чем потеря качества ? (я не придираюсь, просто самому интересно).
First learn computer science and all the theory. Next develop a programming style. Then forget all that and just hack. ( George Carrette )

Оффлайн Chs

  • Perl программер
  • Глобальный модератор
  • Ветеран
  • *****
  • Сообщений: 1108
  • +0/-0
  • 2
    • Просмотр профиля
    • http://chs.now.at/
Цитировать
А можно как-нибудь менее абстрактно объяснить, в чем потеря качества ? (я не придираюсь, просто самому интересно).

Мне тоже интересно.:)
И, кстати, можно привести вопрос в авторской постановке?
« Последнее редактирование: 03 Марта 2003, 22:55:20 от Chs »
2B OR NOT 2B = FF

 

Sitemap 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28