![]() |
![]() |
![]()
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. |
|
|
![]() |
![]()
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
i jest. chyba ze chodzi ci o jakies proste łączenie tabel w stylu ? 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:) |
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 492 Pomógł: 33 Dołączył: 16.08.2007 Skąd: Wrocław Ostrzeżenie: (0%) ![]() ![]() |
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 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 11.10.2025 - 00:56 |