Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Sprawdzanie czy kombinacja pól występuje już w bazie
Forum PHP.pl > Forum > Bazy danych > MySQL
Lion
Mam dwie tabele: users i companies, połączone relacją jeden do wielu. Użytkownik może mieć wiele firm, w tym jedną oznaczoną jako własną. W tabeli companies mam pole user_id, które jest kluczem obcym z tabeli users i pole own_company. Pole own_company przyjmuje wartości 0/1. Czy da się jakoś tak zrobić na poziomie bazy danych, aby przy wstawianiu i aktualizowaniu danych sprawdzać, czy dany użytkownik ma już własną firmę, czyli czy występuje już kombinacja id użytkownika user_id i wartości 1 w polu own_companies. Myślałem o indeksie na te dwa pola, który byłby "unique", ale to spowoduje że będę mógł mieć też tylko jedną firmę obcą.
sowiq
  1. ...
  2. WHERE EXISTS( SELECT 1 FROM companies WHERE user_id = 123 AND own_company = 1 LIMIT 1 )

Analogicznie dla NOT EXISTS.

[edit]
Oczywiście musisz wziąć pod uwagę, że MySQL nie poradzi sobie z zapytaniem UPDATE, które w podzapytaniu wykonuje operacje w obrębie tej samej tabelki.
Sephirus
Nie kombinuj - rozwiązanie jest prostsze niż myślisz:

Tabelę companies zrób tak by own_company przyjmowało 1 lub NULL (czyli INT 1/0 + NULL) i ustaw na polach user_id,own_company indeks UNIQUE.

Kiedy dodajesz firmę nie należącą do gościa ustawiaj own_company na NULL, a jeśli gościa na 1 i tyle.

NULL nie jest brany pod indeks więc może wystąpić sytuacja:

id | user_id | own_company | inne pola ...
1 2 NULL
2 2 NULL
3 2 1
sowiq
Cytat(Sephirus @ 18.10.2013, 11:53:11 ) *
Kiedy dodajesz firmę nie należącą do gościa ustawiaj own_company na NULL, a jeśli gościa na 1 i tyle.

A jeśli jeden user będzie miał kilka "swoich" firm?
Sephirus
Cytując autora tematu:

Cytat
Użytkownik może mieć wiele firm, w tym jedną oznaczoną jako własną.


wink.gif
Lion
Dzięki za odpowiedzi. Chyba zdecyduje się na rozwiązanie które zaproponował Sephirus.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.