Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF] Jak wykonać poniższe zapytanie używając Zend_Db_Table
El.Kurczako
post
Post #1





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

Ostrzeżenie: (0%)
-----


Jak w temacie. Ale jest jeden warunek - chodzi o użycie Zend_Db_Table, adapter dla tej klasy mam w bootstrapie.

Zapytanie następujące:
  1. SELECT u.u_imie AS imie, u.u_nazwisko AS nazwisko, z.z_data AS DATA
  2. FROM uzytkownicy u, zamowienia z
  3. WHERE z.id_uzytkownika = u.id
  4. ORDER BY z.DATA DESC


Bardzo proszę o rozwiązanie.

Ten post edytował El.Kurczako 31.03.2008, 10:52:32
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 9)
Sabistik
post
Post #2


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


Tu musisz sobie zrobić jakąś własną metodę i za pomocą Zend_Db_Select odpowiednio sformułować a następnie zwrócić dane w odpowiedniej dla siebie formie.
Go to the top of the page
+Quote Post
El.Kurczako
post
Post #3





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

Ostrzeżenie: (0%)
-----


Witam

Hmm... próbowałem... i nie wiem dlaczego nie działa, może robię nieodpowiednio. Czy może ktoś coś zaproponować?
Go to the top of the page
+Quote Post
Sabistik
post
Post #4


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


No to pokaż kod który 'probowałeś'.
Go to the top of the page
+Quote Post
El.Kurczako
post
Post #5





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

Ostrzeżenie: (0%)
-----


Dziedziczę po Abstract, zmieniłem teraz, ale to akurat nie ma wpływu.
  1. <?php
  2. class Uzytkownicy extends Zend_Db_Table_Abstract {
  3.  protected $_name = 'uzytkownicy';
  4.  
  5.  public function pokazUzytkownikow() {
  6. $select = $this->select()->from(array('z' => 'zamowienia', 'u' => 'uzytkownicy'), array('u.u_imie as imie', 'u.u_nazwisko as nazwisko', 'z.z_data as data'))
  7. ->where('z.id_uzytkownika = u.id')
  8. ->order('z.data DESC'));
  9. return $this->fetchAll($select);
  10.  }
  11. }
  12. ?>


Raz jeszcze wzór oryginalnego zapytania:
  1. SELECT u.u_imie AS imie, u.u_nazwisko AS nazwisko, z.z_data AS DATA
  2. FROM uzytkownicy u, zamowienia z
  3. WHERE z.id_uzytkownika = u.id
  4. ORDER BY z.DATA DESC


I jeszcze jedno pytanie, czy kolejne warunki WHERE (normalnie dodane przez AND ... np. AND u.nazwisko = "Nowak") dodaje się poprzez ->where()->where->()... czy jakoś inaczej?

UPDATE: jeżeli jest jakiś inny sposób, nie poprzez Zend_Db_Table, to ... chętnie wysłucham. Pytałem o ten konkretny, gdyż ... tak widziałem w jednym z tutoriali i tak zacząłem korzystać.

Ten post edytował El.Kurczako 31.03.2008, 12:21:59
Go to the top of the page
+Quote Post
Sabistik
post
Post #6


Administrator wortalu


Grupa: Przyjaciele php.pl
Postów: 960
Pomógł: 39
Dołączył: 21.10.2003
Skąd: Kraków

Ostrzeżenie: (0%)
-----


A to zapytanie jest w ogóle poprawne? Nie powinno być przez JOINa jakiegoś? tongue.gif

Co do where() to tak jak napisałeś.
Go to the top of the page
+Quote Post
El.Kurczako
post
Post #7





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

Ostrzeżenie: (0%)
-----


Samo zapytanie jest poprawne, sprawdzałem w phpMyAdmin (zresztą jest ono super proste smile.gif ) i wyświetla mi wszystkich użytkowników, którzy wykonali zamówienie, porządkując wg daty, malejąco. Fakt, powinno być GROUP, żeby się nie powtarzali, ale to jest akurat najmniejszy problem. Samo zapytanie jest dla mnie mniej ważne, najważniejsza jest konstrukcja tego typu zapytania (z uwzględnieniem wielu tabel) w ZF i ... stąd ten temat winksmiley.jpg A zapytanie wymyśliłem na poczekaniu (stworzyłem sobie tymczasowe tabele), gdyż będę tego typu zapytania stosował praktycznie ciągle, a chciałem opisać problem na przykładzie.

Tak jak pisałem, może ktoś ma inne rozwiązanie. Np. utworzenie zmiennej w bootstrapie (Zend_Db::factory) i przekazanie jej do obiektów klas modeli... obojętnie. Jeżeli inaczej (albo podobnie) powinno się to rozwiązać, to proszę o pomoc.

Ten post edytował El.Kurczako 31.03.2008, 13:52:49
Go to the top of the page
+Quote Post
kosmowariat
post
Post #8





Grupa: Zarejestrowani
Postów: 235
Pomógł: 17
Dołączył: 18.07.2007
Skąd: Białystok

Ostrzeżenie: (0%)
-----


zawsze w metodzie możesz dać $this->_db->query($sql) ;-)
Go to the top of the page
+Quote Post
LBO
post
Post #9





Grupa: Zarejestrowani
Postów: 1 415
Pomógł: 117
Dołączył: 7.09.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Jeżeli zapytanie - w sensie SQL - działa, to pokaż na forum, co sklecił ten select.

Ten post edytował LBO 31.03.2008, 16:32:25
Go to the top of the page
+Quote Post
El.Kurczako
post
Post #10





Grupa: Zarejestrowani
Postów: 39
Pomógł: 0
Dołączył: 9.02.2004

Ostrzeżenie: (0%)
-----


Sklecił błąd 'Query is empty'.

kosmowariat: czytając manual pisze, że wszystkie zapytania w ZF są najpierw przygotowywane a potem wykonywane, ale czy w tym przypadku także? http://framework.zend.com/manual/en/zend.db.html Punkt 10.1.9. Jeżeli wklepie całe zapytanie z ręki podając dla przekazywanych zmiennych (jeżeli będą) od razu wartości? Czy można to jakoś przygotować najpierw a potem odpalić?

UPDATE: doczytałem, w opisie metody jest, że query przygotowuje a potem odpala kod. Dzięki. Już wciskam 'pomógł' smile.gif Poza tym, dzięki _db mam dostęp do wszystkich metod, które potrzebowałem.

Ten post edytował El.Kurczako 1.04.2008, 07:59:48
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 20.08.2025 - 11:41