Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: wiele rekordów czy wiele zapytań
Forum PHP.pl > Forum > Bazy danych > MySQL
humman
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?

trafas
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
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.