Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> Pobieranie danych kilkoma zapytaniami czy przez join?
awakening
post
Post #1





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.01.2008
Skąd: Warszawa

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


Witam,

mam bazę danych zbudowaną częściowo relacyjnie (celowo jest tylko częściowo) i chciałbym z tej bazy pobrać dane z wszystkich tabel i w tym momencie pojawia się problem gdyż teoretycznie mogę dostać się do wszystkich danych jednym zapytaniem jednak wtedy tworzy mi się ogromna tablica z duplikującymi się danymi (np, w jednej tabeli mam 2 rekordy, a w drugiej 30 rekordów powiązanych z tymi pierwszymi, jak w następnych też jest różna liczba rekordów to wiadomo co się dzieje) i teraz mam pytanie, czy lepiej pobrać te dane kilkoma zapytaniami (3-4) i mieć tylko to co się chce w kilku mniejszych tablicach, czy lepiej pobierać wszystkie do jednej dużej tablicy (100-150 elementów), a później to rozbijać na mniejsze tablice jakąś funkcją, przeszukując tą dużą tablicę itp? Zatrzymałem się w miejscu, a nie chce przerabiać wszystkiego co do tej pory stworzyłem, pomocy (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #2





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Pokaż jaką masz strukturę danych oraz co dokładnie chcesz dostać.
Go to the top of the page
+Quote Post
awakening
post
Post #3





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.01.2008
Skąd: Warszawa

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


Struktura jest cholernie skomplikowana i nie wiem czy ktoś będzie się w stanie w niej połapać: http://img5.imageshack.us/i/bazahxc.jpg/ muszę pobrać rekordy z tabel objects, obj_foto, atrybuty, localization, categories, pozostałe tabele w mniejszym lub większym stopniu opisują relację między tablą objects a tymi, które chce pobrać, generalnie interesuje mnie czy jeżeli wykonam to kilkoma zapytaniami to czy będzie to jak bardzo spadnie mi wydajność aplikacji?
Go to the top of the page
+Quote Post
Crozin
post
Post #4





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Przede wszystkim bądź konsekwentny i jak raz dajesz angielską nazwę to całej reszcie też.

To, że będziesz miał całą masę INNER JOINów raczej nie przeszkadza. Ważne byś miał poprawnie pozakładane indeksy (EXPLAIN SELECT... będzie pomocne).

Swoją drogą: źle wymyśliłeś przypisywanie obiektu do kategorii (na zasadzie jedna kolumna - kategoria główna, druga kolumna - podkategoria). Określ najgłębszą kategorię, a kategorie zrób na zasadzie drzewa.
Go to the top of the page
+Quote Post
awakening
post
Post #5





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.01.2008
Skąd: Warszawa

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


No nie pomagasz mi w ten sposób, takie szczegóły nie mają nic wspólnego z moim problemem... wiem, że masa inner joinów nie przeszkadza w zapytaniu, pod względem wydajności, ale tworzy mi się z tego tablica która może zawierać nawet kilkaset dublujących się elementów, przez to, że do jednego rekordu z obiektem może być przypisanych kilkadziesiąt atrybutów, kilka zdjęć i kilka kategorii, więc w rezultacie otrzymuję np. coś takiego: http://img200.imageshack.us/img200/73/wyniks.jpg Gdybym wykonał kilka zapytań to miałbym oddzielną tablicę np. z 6 zdjęciami, tablice z 2 kategoriami, tablicę z 30 atrybutami i tablicę z jednym obiektem, a teraz mam wielką tablicę z iloczynem kartezjańskim wszystkich rekordów, czyli jeżeli mam 30 atrybutów to mam tez 30 razy powieloną nazwę obiektu itd. (IMG:http://forum.php.pl/style_emoticons/default/sciana.gif)
Go to the top of the page
+Quote Post
Crozin
post
Post #6





Grupa: Zarejestrowani
Postów: 6 476
Pomógł: 1306
Dołączył: 6.08.2006
Skąd: Kraków

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


Hmm... to zaproponuję Ci najprostsze rozwiązanie. Wrzuć do tabel po 20 000 przykładowych rekordów i sprawdź oba sposoby. Na moje oko zrobienie tego tak jak to teraz wygląda wypadnie najlepiej, ale niczego sobie uciąć nie dam.
Go to the top of the page
+Quote Post
awakening
post
Post #7





Grupa: Zarejestrowani
Postów: 30
Pomógł: 0
Dołączył: 12.01.2008
Skąd: Warszawa

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


Rozbiłem to na pięć zapytań (niektóre z join inner i join left) i mam pobrane wszystkie dane które mnie interesując w 5 oddzielnych tablicach (IMG:http://forum.php.pl/style_emoticons/default/smile.gif) w ten sposób będę wyświetlał wszystkie szczegóły obiektu na podstronie obiwktu, więc nie powinno to zabić bazy, wyniki wyszukiwania będą pobierane jednym zapytaniem (IMG:http://forum.php.pl/style_emoticons/default/smile.gif)
Go to the top of the page
+Quote Post

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: 3.10.2025 - 03:42