Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [mysql] projekt bazy a poruszanie sie po tabelach
Forum PHP.pl > Forum > Bazy danych > MySQL
esos
posiadam tabele (TB1), w ktorej przechowywane sa informacje podstawowe (nazwa, adres, woj, opis, itd) na temat podmiotow gospodarczych.
musze przechowywac dane o uslugach ktore moga swiadczyc podmioty, wiec... 2ga tabela (TB2) zawiera uslugi (id_uslugi|nazwa_uslugi).
musialem jakos powiazac podmioty gospodarcze z uslugami, wiec stawiam trzecia tabele (TB3) - powiazania (id|id_uslugi|id_podmiotu), gdzie jeden podmiot moze miec przypisanych kilka uslug (czyli jest kilka rekordow gdzie wystepuje id_podmioty z przypisanymi mu roznymi id_uslug).

jak rozwiazac zapytaniem sytuacje, gdy Uzytkownik strony zapyta: interesuja mnie interesuja mnie podmioty, ktore sa z woj X (czyli dane z TB1), oraz wykonuje uslugi Y, Z, V, W (dane z TB3)?

ewentualnie w jaki inny sposob ustalic w miare sensownie powiazania pomiedzy podmiotami i uslugami zakladajac, ze uslugi musza byc zeslownikowa w taki sposob, by latwo dodawac kolejne rekordy (uslugi) do tabeli?
thek
Pytanie zasadnicze... Czy owe Y,Z,V,W z T3 ma mieć wszystkie pojedynczy podmiot z tabeli T1, czy wystarczy, że ma choć jedną z owych cech? Bo jeśli choć jedną, to jest to nic innego niż JOINy z odpowiednim WHERE oraz IN. W drugim wypadku jest znacznie gorzej i napisanie takiego zapytania moim zdaniem mija się trochę z celem. Lepiej wtedy użyć grupowania i po stronie PHP określić stopień trafności wyrzucając wszystkie, które nie spełniają warunku pokrywania się z wszystkimi kryteriami.
esos
wlasnie bierzemy pod uwage sytuacje, gdy zarowno trzeba wziac pod uwage nie tylko jeden rekord, ale wszystkie powiazania, lub dowolna ilosc powiazan dotyczaca wybranego podmiotu.

pojawia sie pytanie, co zrobic w takim przypadku? zastanawialem sienad jeszcze jednym rozwiazaniem:
bedziemy miec dwie tabele - pierwsza (TB1), gdzie tak jak obecnie posiadamy ogolna charakterystyke przedsiebiorstwa, oraz 2ga (TB2), ktora jest lista uslug wraz ze znacznikiem ktoremu przedsiebiorstwu jest przypisany dany rekord. lista uslug jest oznaczana jako 0/1, false/true (jak zwal tak zwal). tyle, ze takie rozwiazanie tak naprawde nie na wiele sie zda, nie bede mial swobody w rozbudowie rekordow dot. uslug... rownie dobrze moglbym rozbudowac (TB1) i dorzucic pola z uslugami wypelniajac je jakims znacznikiem tak/nie.

czy ma ktos jeszcze jakies inne pomysly...?
phpion
Po pierwsze:
Cytat(esos @ 27.08.2010, 20:04:38 ) *
trzecia tabele (TB3) - powiazania (id|id_uslugi|id_podmiotu)

Kolumna id jest tutaj kompletnie zbędna. Klucz główny powinien być ustawiony na dwóch kolumnach jednocześnie: id_uslugi i id_podmiotu.

Ale nawiązując do pytania: masz 2 możliwe scenariusze działań:
1. Chcesz znaleźć firmę, która świadczy co najmniej 1 spośród wybranych usług.
2. Świadczy wszystkie wybrane usługi.

W pierwszym przypadku masz sprawę jasną: robisz JOINa i jako warunek dajesz id_uslugi IN (X, Y, Z). W drugim przypadku musisz dodatkowo użyć grupowania (GROUP BY) i sprawdzić, czy ilość usług jest poprawna (HAVING COUNT(powiazania.id_uslugi) = 3, gdzie 3 to ilość wybranych usług).
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.