Rafał G.

Rafał G. Programista
aplikacji
internetowych

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Załóżmy, że w jednej tabeli, powiedzmy "users" mam użytkowników oznaczonych unikalnym ID, w drugiej tabeli "products" mam produkty też oznaczone unikalnym ID. Dokładam sobie tabelę "users_products", która zawiera id użytkownika i id produktu, i chcę ją wypełnić tak, że użtytkownik o ID = 1, będzie miał wszystkie produkty?

Jak to zrobić w MySQL 4.0x? Chciałem wykorzystać INSERT INTO ... SELECT, problem w tym, że nawet jeśli sobie pobiorę wszystkie produkty z "products" to muszę jakoś zduplikować klucz tego użytkownikaj (o id=1), żeby był wstawiony w każdej krotce w "users_products" wraz z odpowiednim id produktu.

Macie jakiś pomysł na zapytanie, które załatwi mój problem?
Grzegorz G.

Grzegorz G. ASE / Systems
Architect, Syniverse

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

insert into users_products (id_user, id_prod)
select 1, id
from products

voila :-)
Rafał G.

Rafał G. Programista
aplikacji
internetowych

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

W sumie działa, bo się tabela wypełnia tylko wyrzuca błąd jeszcze:
"#1062 - Duplicate entry '1-11' for key 1 ".
Grzegorz G.

Grzegorz G. ASE / Systems
Architect, Syniverse

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Nie znam MySQL-a, ale brzmi jakby klucz został naruszony :-) albo już coś tam jest, w owej tabeli realizującej wiele-do-wiele, dla użytkownika 1 - albo id nie jest unikalne w produktach.

konto usunięte

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Rafał Grzegorek:
W sumie działa, bo się tabela wypełnia tylko wyrzuca błąd jeszcze:
"#1062 - Duplicate entry '1-11' for key 1 ".

Wygląda na to, ze masz na users_products założony index PRIMARY na dwóch kolumnach i zduplikowane id w tabeli products - powtarza się para kluczy.Tadeusz W. edytował(a) ten post dnia 08.05.08 o godzinie 14:01

konto usunięte

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Dokładnie... Ja osobiscie dolozylbym 3 kolumne jako KEY ze zyklym indeskem i po problemie.

konto usunięte

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

W sumie jesli pary maja byc unikalne w skali tabeli to PRIMARY na dwoch kolumnach to bardzo dobre rozwiazanie, nie ma po co mnozyc danych. W sumie taki rekord ma tylko dwie mozliwosci - istnieje lub nie :)

konto usunięte

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Piotr Ozga:
Dokładnie... Ja osobiscie dolozylbym 3 kolumne jako KEY ze zyklym indeskem i po problemie.
Tu się nie zgodzę. Tego typu rozwiązanie nic nie przynosi, ponieważ i tak musisz założyć index unique na dwóch kolumnach, trzecia kolumna z PK AI w tym przypadku jest zbędna.

Rafał :
Po pierwsze popraw schemat bazy i usuń duplikaty wierszy na których chcesz zakładać PK ew. Index unique bo ci się to po prostu nie uda bez wyłączenia pewnej opsji. ;)

Masz jakieś racjonalne wytłumaczenie stosowania mySQL 4 gdy jest mySQL 5?

Jeżeli masz relację M:N, to przy tego typu rozwiązaniach w tabeli łączącej owe "product" i "user" często dodawane są dodatkowe kolumny, np. TIMESTAMP, myslę, że to powinno ci się przydać:

http://dev.mysql.com/doc/refman/4.1/en/insert-on-dupli...

--
Pozdrawiam
RafałRafał Wardas edytował(a) ten post dnia 08.05.08 o godzinie 16:04

konto usunięte

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Rafał Grzegorek:
W sumie działa, bo się tabela wypełnia tylko wyrzuca błąd jeszcze:
"#1062 - Duplicate entry '1-11' for key 1 ".

insert into users_products (id_user, id_prod)
select DISTINCT 1, id
from products
Marcin Wójcik

Marcin Wójcik Vemma IT
Coordinator,
GetResponse

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Rafał Grzegorek:
W sumie działa, bo się tabela wypełnia tylko wyrzuca błąd jeszcze:
"#1062 - Duplicate entry '1-11' for key 1 ".


insert ignore into users_products (id_user, id_prod)
select DISTINCT 1, id
from products

konto usunięte

Temat: Tabela "wiele do wielu" - problem z wypełnieniem

Przy okazji dodaj jeszcze indeks (jesli nie ma) na pole ktore nie jest jako pierwsze w PK.

Nie wiem czy w MySQL, ale w innych DBMS pomaga na zapytania oparte na tym drugim polu.

Następna dyskusja:

[Mysql] Wyszukiwanie po tag...




Wyślij zaproszenie do