Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [php][mysql] wiele-do-wielu: grupowanie wyników, budowy książki telefonicznej ciąg dalszy
lukasz_matysek
post
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.

  1. $t=mysql_query("SELECT wpisy.nazwa,kategorie.nazwa FROM KategorieWpisy,wpisy,kategorie WHERE KategorieWpisy.idwpis=wpisy.id AND KategorieWpisy.idkategoria=kategorie.id") or die (mysql_error());
  2. while($y = mysql_fetch_array($t))
  3. {
  4. $output_buffer.="<tr><td>$y[0]</td><td>$y[1]</tr>";
  5. }
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lukasz_matysek
post
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:
  1. while($row1 = mysql_fetch_array($results1)) {

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
Go to the top of the page
+Quote Post

Posty w temacie


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

 



RSS Aktualny czas: 17.09.2025 - 21:07