Lion
18.10.2013, 09:17:03
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
18.10.2013, 10:27:52
...
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
18.10.2013, 10:53:11
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
18.10.2013, 10:55:58
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
18.10.2013, 11:22:41
Cytując autora tematu:
Cytat
Użytkownik może mieć wiele firm, w tym jedną oznaczoną jako własną.
Lion
22.10.2013, 22:23:03
Dzięki za odpowiedzi. Chyba zdecyduje się na rozwiązanie które zaproponował Sephirus.