[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
kuba - 29-07-2007 00:00
[mysql 5.x] jak =?ISO-8859-2?Q?zrealizowa=E6_zapytanie=3F_cz?==?ISO-8859-2?Q?yli_podzapytanie_i_wi=EAcej_ni=BF_jeden_rz=B1? ==?ISO-8859-2?Q?d_wynik=F3w?=
Witam,
*Background* Mamy 6 tabel: - tab_wojewodztwo (id_wojewodztwo, nazwa) - tab_miasto (id_miasto, nazwa, id_wojewodztwo) - tab_sklep (id_sklep, nazwa, id_miasto) oraz - newsletter (id_newsletter,tresc,id_wojewodztwo) - kwerenda_newsletter_miasto (id_miasto,id_newsletter) - kwerenda_newsletter_sklep (id_sklep,id_newsletter)
Każdy newsletter może być przypisany albo: - do wojewodztwa (tylko wpis w tabeli newsletter) - do miasta (wpis w tabeli newsletter i kwerenda_newsletter_miasto) - do sklepu (wpis w tabeli newsletter i kwerenda_newsletter_sklep)
*Problem* Ppobranie w jednym zapytaniu Dla danego newslettera, niezeleżnie od jego przypisania (województwo,miasto,sklep), listy parametrów id_sklep.
*Algorytm* Czy sklep jest przypisany do newslettera? Jeśli tak: pobierz przypisane sklepy. Jeśli nie: Czy miasto jest przypisane do newslettera? Jeśli tak: pobierz sklepy należące do miasta. Jeśli nie: pobierz sklepy, których miasto należy do województwa
Teoretycznie można to łatwo zrealizować, MySQL posiada przecież konstrukcje SELECT IF(war,tak,nie); Problem w tym jednak, że "tak" i "nie" to podzapytania, a te mogą zwracać jedynie jeden rząd wyników. Zatem gdy w algorytmie słowo "pobierz" zamienimy na "zlicz" sprawa jest niemalże trywialna. Co jednak zrobić, kiedy chodzi nam o pobranie a nie policzenie?
Przyszedł mi pomysł na obejście tego problemu jednak ma ono pewną wadę.
*Obejście* Podczas tworzenia newslettra przypiasanego wyżej niż poziom sklepów, należy jawnie wpisywać też id_sklepów, czyli:
Każdy newsletter może być przypisany albo: - do wojewodztwa (tylko wpis w tabeli newsletter *i kwerenda_newsletter_sklep*) - do miasta (wpis w tabeli newsletter i kwerenda_newsletter_miast *i kwerenda_newsletter_sklep*) - do sklepu (wpis w tabeli newsletter i kwerenda_newsletter_sklep)
*Wada obejścia* W sytuacji kiedy mamy newsletter przypisany do wojewodztwa (i pośrednio dalej do miast i skelpów) przypisanie nowego sklepu do miasta wymaga recznego uzupełnienia tabel kwerend.
Ma ktoś może pomysł na realizację takiego zapytania? wzglednie może propozycje zamiany bazy, lub też pomysł na inne ciekawe, pozbawione tej wady obejście?
Pozdrawiam, Jakub
=?UTF-8?B?RmlsaXAgUmVtYmlhxYJrb3dza2k=?= - 31-07-2007 00:01
kuba wrote at 28 VII 2007 12:48: > Witam, > > *Background* > Mamy 6 tabel: > - tab_wojewodztwo (id_wojewodztwo, nazwa) > - tab_miasto (id_miasto, nazwa, id_wojewodztwo) > - tab_sklep (id_sklep, nazwa, id_miasto) > oraz > - newsletter (id_newsletter,tresc,id_wojewodztwo) > - kwerenda_newsletter_miasto (id_miasto,id_newsletter) > - kwerenda_newsletter_sklep (id_sklep,id_newsletter) > > Każdy newsletter może być przypisany albo: > - do wojewodztwa (tylko wpis w tabeli newsletter) > - do miasta (wpis w tabeli newsletter i kwerenda_newsletter_miasto) > - do sklepu (wpis w tabeli newsletter i kwerenda_newsletter_sklep) > > *Problem* > Ppobranie w jednym zapytaniu Dla danego newslettera, niezeleżnie od jego > przypisania (województwo,miasto,sklep), listy parametrów id_sklep.
<lista ID sklepów wg tabeli kwerenda_newsletter_sklep> UNION <lista ID sklepów wg JOINA z tabelą tab_miasto> UNION <lista ID sklepów wg JOINA z tabelą tab_wojewodztwo>
zanotowane.pldoc.pisz.plpdf.pisz.pleffulla.pev.pl
|
Gdzie MySQL 4.1, a gdzie 5.0?
[MS SQL] "set names" (mySQL) w MS SQL
oracle -> oracle lub oracle -> mysql replikacja - programy
[MySQL] Zwrot tego, co pasuje i nie pasuje :-/
[pgsql] Dostosowanie składni MySQL 5.0 -> PGSQL 8.1
[mysql] galeria zdjec - numerowanie zdjec
[mysql] CONCAT agregujący, ale nie GROUP_CONCAT()
mysql data 0000-00-00 na koniec
[MySQL] Problem z zapisem danych w bazie danych
jak przenieesc czesc tabeli do innej tabeli MySQL
zanotowane.pldoc.pisz.plpdf.pisz.planette.xlx.pl
Cytat
Decede mihi sole - nie zasłaniaj mi słonca. Gdy kogoś kochasz, jesteś jak stworzyciel świata - na cokolwiek spojrzysz, nabiera to kształtu, wypełnia się barwą, światłem. Powietrze przytula się do ciebie, choćby był mróz, a ty masz w sobie tyle radości, że musisz ją rozdawać wokoło, bo się w tobie nie mieści Hoc fac - tak czyń. A tergo - od tyłu; z tyłu. I czarne włosy posiwieją. Safona |
|