Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Pobieranie bazy z nazy danych. Dane powiązane
Forum PHP.pl > Forum > PHP
menic
Chce pobrac dane z dwóch tabel. Pierwsza to pytania, a następna to odpowiedzi do tych pytan. I nie wiem jak sie do tego zabrac. dry.gif
Pierwsza mozliwość:
-W pętli wyświetlającej pytania dać zapytanie pobierające odpowiedzi dla aktualnego pytania.
Druga mozliwosc:
-Wczytac odpowiedzi do tablicy i pozniej w peli z pytaniami porownywac.
Trzecia:
?

Pierwsza odpada, bo w szablonie nie dam przeciez zapytania.
Druga chyba tez odpada, bo tablica bedzie miała baardzo dużą wielkość, gdyż nie wiemy ile tych odpowiedzi bedzie.

Jakies sugestie?

BTW. Uzywam propela jezeli to do czegos sie przyda winksmiley.jpg
Cienki1980
A pokaż ten kawałek kodu, w którym wyświetlasz pytania.

Bo jak dla mnie nie powinno być problemem złożenie zapytania w momencie wyświetlania pytania.
menic
Problemem jest wtedy kiedy chce sie oddzielic w jak najwiekszym stopniu logike model od widoku winksmiley.jpg
Cienki1980
No się domyślam, że nie łączysz php z html'em skoro mówisz o szablonach.

Nie wiem jak to jest w propel'u ( nawet nie wiem co to jest ) ale w przypadku Smartów nigdy nie napotkałem takiego problemu.
menic
Nie wierze, ze nikt nie ma pomysłu :/
Cienki1980
A dlaczego nie możesz stworzyć tablicy w momencie tworzenia tablicy z pytaniami questionmark.gif
Przecież możesz ją tak skonstruować, że nie będzie potrzebne porównywanie, tylko odpowiednio skonstruowane pętle w szablonie.
menic
Tak skonstruowac czyli jak?
Cienki1980
  1. <?php
  2. $tablica=array();
  3. $tablica[0]['pytanie']="pytanie numer 1";
  4. $tablica[0]['odpowiedz'][0]="odopwiedz numer 1 na pyt1";
  5. $tablica[0]['odpowiedz'][1]="odopwiedz numer 2 na pyt1";
  6. $tablica[0]['odpowiedz'][2]="odopwiedz numer 3 na pyt1";
  7. $tablica[1]['pytanie']="pytanie numer 2";
  8. $tablica[1]['odpowiedz'][0]="odopwiedz numer 1 na pyt2";
  9. $tablica[1]['odpowiedz'][1]="odopwiedz numer 2 na pyt2";
  10. $tablica[1]['odpowiedz'][2]="odopwiedz numer 3 na pyt2";
  11. ?>


I tak dalej.

Potem dwie pętle w szablonie i masz obsłużone wyświetlanie pytań i odpowiedzi.
W smartach tak robiłem ... może nie jest to "profi" ale działa.
athabus
Nie wiem czy dobrze rozumiem Twój problem, ale czemu nie połączysz tego wszystkiego w jedno zapytanie z joinem? Wykonywanie pytań w pętli to IMHO zły pomysł bo przecież powoduje to nadmierną i niepotrzebną ilość zapytań.
menic
IMO nie da sie tego zrobić jednym zapytaniem z join'em i jedną petlą. Najrozdądniejszym rozwiązaniem, jest wlasnie przygotowanie odpowiedniej tablicy z danymi.
@Cienki1980: Propel to jest system obsługi sql (ORM).
Cienki1980
@menic : acham ... pierwsze słysze o propelu .. ale ja się nie znam ...

Taki układ tablicy pomoże Ci w rozwiązaniu problemu questionmark.gif
athabus
Jeśli jest 1 pytanie-> 1 odpowiedź to 1 zapytanie wystarczy w zupełności.

Jeśli natomiast 1 pytaniu odpowiada kilka odpowiedzi to sprawa jest trochę bardziej złożona i będą potrzebne 2 zapytania. Ja akurat mam odpowiednie klasy, które ułatwiają mi odczytywanie takich zapytań.

W skrócie u mnie wygląda to tak:

-> 1 zapytanie w celu odczytania wszystkich pytań, które potrzebujesz

-> 2 zapytanie, które odczytuje właściwe odpowiedzi.

Wczoraj robiłem podobny odczyt dla produtków, które mają pewne własności (typu nazwa cena itp) oraz dodatkowe cechy -> np. kolor itp - każdy produkt może mieć różne cechy i różną ich liczbę.

U mnie wyglądało to mniej więcej tak

  1. <?php
  2. /**
  3.  * Zwraca tablice danych o obiekcie
  4.  *
  5.  * Tablica ma postac
  6.  * [id_produktu] (array)
  7.  *  =>[productData](array)
  8.  *  =>[featuresData](array)
  9.  *  =>[feature 1] (array)
  10.  *  =>...
  11.  *  =>[feature x] (array)
  12.  * 
  13.  * @param array|int $arId
  14.  * @return array
  15.  */
  16. public static function getDataById($arId)
  17. {
  18. //tu są 2 zapytanie zwracają wartość $productRestult o produkcie i $resultFeatures
     cechy produktów - nie zamieszczam zapytan zeby nie gmatwac - bylo kilka joinow itp. bo wyniki byly z roznych tabel
  19.  
  20.  
  21. //przygotowanie tablicy wynikowej - > klucz to id potem tablica skladajaca sie z tablicy
  22. //z info o produkcie oraz tablicy cech.
  23. $resultArray=array();
  24. foreach ($ProductResult as $row)
  25. {
  26. $resultArray[$row['product_id']]=array('productData'=>$row, 'featuresData'=>array());
  27. //dla kazdego nowego produktu tworzymy tablice 2 elementowa z danymi produktu (productData) oraz kolekcja cech ('featuresData') - ta tablica na razie pusta - dodamy cechy w nastepnej petli
  28. }
  29.  
  30. foreach ($resultFeatures as $row)
  31. {
  32. //teraz lecimy po odczytanych cechaach i dodajemy je do glownej tablicy
  33. $resultArray[$row['article_id']]['featuresData'][]=$row;
  34. }
  35.  
  36. return $resultArray;
  37. }
  38. ?>
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.