Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> wiele rekordów czy wiele zapytań
humman
post 20.06.2012, 18:32:27
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?

Go to the top of the page
+Quote Post
trafas
post 20.06.2012, 23:07:12
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
Go to the top of the page
+Quote Post

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

 



RSS Wersja Lo-Fi Aktualny czas: 12.06.2025 - 12:12