Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zapytanie warunkowe?
Hazel
post
Post #1





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Witam.
Moja struktura bazy jawi się tak:

tabela X (id, type (pole typu ENUM o możliwych wartościach t lub n lub g), nieistotna_kolumna1, nieistotna_kolumna2...)

tabela T (id, jakieś tam kolumny)
tabela N (id, jakieś tam kolumny)
tabela G (id, jakieś tam kolumny)

Tworzę zapytanie SELECT, które ma pobierac dane z odpowiedniej tabeli T lub N lub G, w zależności od wartosci type dla danego id. Da się to zrobić jednym zapytaniem poprzez łączenie tabel w jakiś sposób? Zupełnie nie mam pomysłu.

Oczywiście, nie musi być jednym zapytaniem - ale możliwie najwydajniej. Żeby nie trzeba było pobierać wartości type do php i w zależności od tej wartości robić trzech różnych zapytań... No, chyba że nie da się inaczej.

Proszę o pomoc i pozdrawiam.
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
mysz0n
post
Post #2





Grupa: Zarejestrowani
Postów: 78
Pomógł: 1
Dołączył: 16.08.2006
Skąd: szy-ły

Ostrzeżenie: (0%)
-----


nie lubie takich przykładów a,b,c,x wiec zakładam ze pola enum to pola: ksiazki, plyty_cd, filmy_dvd, do tego masz tabele z wieksza iloscią informacji odnośnie tych trzech rezczy, dajmy na to ze ktos klika u ciebie button z filmami_dvd i ty generujesz pytanie

  1. SELECT * FROM '$to_co_kliknal_user';

i jest.

chyba ze chodzi ci o jakies proste łączenie tabel w stylu
  1. WHERE x.typ = g.id
?

jesli nie chodzi o to to napisz jakos jasniej na bardziej 'życiowych' przykładach, wtedy zawsze jakoś łatwiej mi sie myśli nad ew. innym rozwiazaniem:)
Go to the top of the page
+Quote Post
Hazel
post
Post #3





Grupa: Zarejestrowani
Postów: 492
Pomógł: 33
Dołączył: 16.08.2007
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


Cytat(mysz0n @ 18.01.2008, 01:18:08 ) *
chyba ze chodzi ci o jakies proste łączenie tabel


Tak, chodzi raczej o łączenie tabel. Czy proste - nie mi to oceniać, wszystko jest proste, jak się potrafi to zrobić, ja nie potrafię, więc dla mnie to trudne (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

No to tak. Mam obiekt, który można nazwać koszykiem (koszykiem nie jest do końca, spełnia jednak podobną funkcję). Każdy użytkownik ma swój koszyk. W koszyku ma jakieś przedmioty. Powiedzmy, że użytkownik o id 1 ma 2 książki, 2 płyty cd i film dvd. Oznacza to, że rekordy tabeli X (czy, jak wolisz, tabeli PRZEDMIOTY) wyglądają tak:
Kod
id_przedmiotu typ_przedmiotu id_użytkownika
1 książki 1
2 książki 1
3 płyty_cd 1
4 płyty_cd 1
5 filmy_dvd 1


Załóżmy, że istnieje jeszcze czwarty rodzaj obiektów, na przykład czasopisma. Jak widać, w przykładzie użytkownik 1 nie ma żadnego czasopisma w koszyku. Przejdźmy dalej.
Mam tabele typy_książek, typy_płyt_cd, typy_filmów_dvd, typy_czasopism. W nich znajdują się szczegółowe informacje o danym rodzaju przedmiotów. Chcę je po prostu wyciągnąć. Ale w taki sposób, by nie angażować niepotrzebnie tabeli typy_czasopism, jeśli w koszyku nie ma żadnego czasopisma. To chyba dość ambitne, żeby zrobić to w jednym zapytaniu - dla mnie zbyt ambitne. No bo kilkoma zapytaniami to nie problem - if ($row['typ_przedmiotu']=='książki'){[zapytanie do tabeli typy_książek]} else if(...) itd. Mam nadzieję, ze wytłumaczyłem to dobrze. Liczę, że jedno zapytanie działałoby do kilku razy szybciej (w skrajnych przypadkach, kiedy dany użytkownik ma w koszyku wszystkie rodzaje przedmiotów, to nawet do kilkunastu razy) niż pobieranie typu obiektu z każdego rekordu, sprawdzanie go w php, wysyłanie kolejnego zapytania, i tak aż do końca tyle razy, ile jest tabel typów, więc sądzę, że gra jest jednak warta świeczki. Proszę o pomoc.

P.S. Strukturę bazy chciałbym zmienić tylko w ostateczności. Zdaję sobie sprawę, że dla podanego przykładu struktura jest daleka od optymalnej, ale to jest tylko jeden z wielu modułów całego projektu - baza ma znacznie więcej tabel i jest przeznaczona do znacznie wiekszej ilości zadań. Dlatego chciałbym ją modyfikować tylko w ostateczności - jestem skłonny to zrobić, jeśli ktoś zaproponuje naprawdę o niebo lepsze rozwiązanie, ale wolałbym nie, bo to niesie za sobą gigantyczne przeróbki w reszcie kodu. Więc najlepiej by było, gdyby potencjalne rozwiązanie dotyczyło takiej struktury bazy.
Pozdrawiam.

Ten post edytował Hazel 19.01.2008, 09:07:12
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 11.10.2025 - 00:56