![]() |
![]() |
![]()
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: 33 Pomógł: 2 Dołączył: 25.03.2010 Ostrzeżenie: (0%) ![]() ![]() |
Z tego co widzę, proponujesz osobno pozyskiwać kolejne nazwy wpisów, a potem doklejać do tego w zmiennej buforującej wyszukane nazwy kategorii.
w związku z tym _prawdopodobnie_ wiersz 4 powinien wyglądać tak: albo się mylę. Popraw mnie jeżeli źle to rozumiem. Pomysł jak najbardziej logiczny i bardzo mi się podoba, chociaż zwielokrotnia to ilość wykonanych zapytań i z pewnością nie jest, jak sam powiedziałeś, najbardziej optymalnym rozwiązaniem. Mimo to książka, którą piszę będzie używana na maksymalnie 10 stanowiskach w sieci lokalnej i to rzadko jednocześnie, więc temat wydajności mogę lżej potraktować. Tak jak pisałem, ta koncepcja bardzo mi się podoba i pewnie z niej skorzystam. Jednak zainteresował mnie też drugi pomysł - zrzucenie całego wyniku do tablicy, przetworzenie jej i wyrzucenie na ekran. Mam w związku z tym pomysłem pytanie o wydajność po stronie serwera: załóżmy większe obciążenie bazy, rzędu kilkaset klientów klikających po książce w której jest kilkaset rekordów. Co się dzieje z ramem (-lub cache'm - nie wiem (IMG:style_emoticons/default/smile.gif) ) na serwerze, kiedy serwer jest zmuszony przechowywać tak duże zmienne tablicowe? Tal czy inaczej, dzięki za pomoc, twój post rozwiązał problem. Ten post edytował lukasz_matysek 30.03.2010, 09:59:05 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 17.09.2025 - 21:07 |