![]() |
![]() ![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 43 Pomógł: 0 Dołączył: 13.02.2008 Ostrzeżenie: (0%) ![]() ![]() |
Witam
Mam problem z zaprojektowaniem aplikacji a dokładniej chodzi o system powiązań. załóżmy, że mamy jakiś obiekt np strona internetowa, której dane są zapisane w bazie, (będzie 10 000 takich obiektów a docelowo 100 000). Są one ze sobą powiązane - średnio jedna strona do 100 innych. na razie jest prosto, mam dwie tabeli. Jedna przechowuje dane strony druga powiązania. i tutaj mam pytanie jakie zapytanie jest wydajniejsze przy wyświetlaniu danych powiązanych: 1. SELECT *(jakieś dane) FROM strona INNER JOIN strona_strona ON strona_strona.id_str=strona.id WHERE strona.id='".$id."' 2. SELECT *(jakieś dane) FROM strona, strona_strona WHERE strona_strona.id_str='".$id."' AND strona_strona.id_str2=strona.id sprawa się komplikuje gdy strony mają dalsze powiązania: StronaA -> StronaB -> StronaC logując się na stroneA chciałbym zobaczyć linki zarówno stron powiązanych (stronaB+99 inncyh) jak i stron powiązanych 2 poziomu (stronaC +99 innych) warunek jest taki, że przeczytać informacje o linku można pod warunkiem, że ma się powiązanie z daną strona lub powiązanie 2 poziomu. i tu jest problem bo: 1. dodając link powinienem od razu dodać do bazy powiązania, które strony będą go widziały ale wtedy szybko powstanie bardzo dużo rekordów: 100 stronA x 100 stronB = 10 000 powiązań dla jednego linku. A linków będzie wiele - nawet do 20tu na jedna stronę. 2. drugi sposób to zrobić zapytanie po wszystkie powiązane strony i powiązane z drugiego poziomu, zachować wyniki w tablicy a następnie zapytanie po linki i porownywać czy id strony pobranego linku znajduje się w tablicy i jeśli tak to wyświetlić, jeśli nie to nie wyświetlać. Czy to będzie optymalne? Chodzi o tablice z nawet 10 000 danych i potem sprawdzanie czy dany id znajduje się w tablicy, dodatkowo po wejściu na link aby zobaczyć więcej informacji znowu musiałbym zrobić zapytanie po wszystkie powiązania (10 000) i umożliwić przeczytanie informacji tylko jeśli id znajduje się w tablicy. 3. czy da się to zrobić jeszcze w inny - bardziej optymalny sposób? |
|
|
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 87 Pomógł: 12 Dołączył: 31.05.2006 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co widzę, to zasada powiązania stron będzie podobna do forum.
Proponuję poszukać materiałów w tym kierunku. Można to zrobić na klasie i do tego dorobić funkcję rekurencyjną - ale jak to się będzie miało do wydajności - trudno powiedzieć. Kawałek czasu temu testowo robiłem coś takiego: http://trafas.ovh.org/forum/index.php Jak chcesz to kliknij sobie tam link "Pliki do pobrania" to zobaczysz jak to wszystko wygląda od środka Ten post edytował trafas 20.06.2012, 23:07:41 |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 12.06.2025 - 12:12 |