![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 33 Pomógł: 2 Dołączył: 25.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Piszę książkę telefoniczną w php, używam bazy mysql.
W bazie są trzy tabele: wpisy, kategorie oraz tabela realizująca relację wiele-do-wielu: kategorieWpisy. W tabeli tej znajdują się ID kontaktów i kategorii. Załóżmy, że robię selecta dla potrzeb wyświetlenia tablicy z kontaktami i kategoriami: SELECT wpisy.nazwa, kategorie.nazwa FROM wpisy,kategorie,KategorieWpisy WHERE KategorieWpisy.idkontakt=wpisy.id AND KategorieWpisy.idkategoria=kategorie.id czyli dostaję wynik w formie jednej tablicy z nazwami kontaktów i kategoriami, do których są przypisane. Tablicę tą obsługuję oczywiście w standardowy sposób fetch_array Kiedy dany kontakt jest przypisany do więcej niż jednej kategorii, to wynik dotyczący danego kontaktu otrzymuję w formie dwóch wierszy, na przykład: nazwakontaktu kategoria1 nazwakontaktu kategoria2 Chciałbym, żeby użytkownik zobaczył to w formie: nazwakontaktu kategoria1,kategoria2 Problem leży w tym, że linijka "kategoria2" jest generowana już za następnym przebiegiem pętli while-mysql_fetch_array. W związku z tym nie wiem co zrobić, aby uzyskać żądany efekt. Wycinek kodu; wynik zrzucam do zmiennej buforującej i potem wyrzucam echem.
|
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 2 178 Pomógł: 596 Dołączył: 25.09.2009 Skąd: Piwniczna-Zdrój Ostrzeżenie: (0%) ![]() ![]() |
Oczywiście trzeba się zastanowić nad sensownym mechanizmem cache'owania takiej dużej tablicy, bo po co ją setki razy generować. Kilkaset wpisów, to raczej nie jest problem (choć to zależy przede wszystkim od "mocy" serwera), problemem będzie kilka tysięcy wpisów. Zauważ tylko, że już przy kilkuset wpisach koniecznością staje się stworzenie stronicowania, bo weź wyświetl kilkaset wpisów jednym ciągiem. A wykorzystując mechanizm stronicowania nie musimy generować, aż tak dużych tablic (podobnie przetwarzanie zapytań do bazy danych nie będzie już "tak nieoptymalne").
|
|
|
![]() ![]() |
![]() |
Aktualny czas: 3.10.2025 - 22:40 |