Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [MySQL][PHP]ZEND i zapytanie
kielich
post 14.02.2010, 18:41:27
Post #1





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


Witam,
mam problem z zapytaniem mianowicie może robię to jakoś na około i nie wychodzi. Chce pobrać 5 rekordy losowe .
O to jaki nabazgrałem kod

model
  1. <?php
  2. class Application_Model_DbTable_Ocena extends Zend_Db_Table_Abstract
  3. {
  4. protected $_name = 'ocena';
  5.  
  6. public function getLosowaOcena() {
  7. $LosowaOcena = sprintf(
  8. "select %s data. %s tresc From %s Order by rand() Limit 5".
  9.  
  10. $this->_data.
  11. $this->_tresc.
  12. $this->_ocena);
  13. $db= $this->getAdapter();
  14. $zapytanie = $db->query($LosowaOcena);
  15.  
  16. return $zapytanie->fetchAll();
  17. }
  18.  
  19. }
  20.  


Kontroler
  1. $Ocena = new Application_Model_DbTable_Ocena();
  2. $this->view->Ocena = $Ocena->getLosowaOcena();
  3.  


Widok
  1. <?php echo $this->partial(array('Ocena'=> $this->Ocena) );?>
  2.  


bardzo proszę o poradę bądź jakiś inny sposób


Ten post edytował kielich 14.02.2010, 18:41:44


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
AlexDeLarge
post 14.02.2010, 19:29:38
Post #2





Grupa: Zarejestrowani
Postów: 85
Pomógł: 14
Dołączył: 14.02.2010

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


Ale nie napisałeś jaki jest problem. Temat sugeruje, że chodzi o zapytanie. Powiem Ci, że nie stosuje się ORDER BY RAND() gdyż MySQL stosuje tę operację dla każdego wiersza z tabeli po czym dopiero wyciąga odpowiednie wiersze = duże marnotrawienie zasobów. Zamiast tego możesz np. wylosować w PHP 5 cyfr z zadanego zakresu i w zapytaniu zrobić coś a'la '... WHERE id IN ('.implode(', ', $id) .' )'

Zdrówka życzę.

Ten post edytował AlexDeLarge 14.02.2010, 19:30:38


--------------------
Java and PHP developer 2007-2014 :)
Go to the top of the page
+Quote Post
kielich
post 14.02.2010, 20:35:39
Post #3





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


No wysypało się pełno błędów m.in

Kod
Fatal error: Uncaught exception 'Zend_View_Exception' with message 'script 'Array' not found in path
...



Ten post edytował kielich 14.02.2010, 20:35:52


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
Go to the top of the page
+Quote Post
darko
post 14.02.2010, 20:44:02
Post #4





Grupa: Zarejestrowani
Postów: 2 885
Pomógł: 463
Dołączył: 3.10.2009
Skąd: Wrocław

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


Cytat(AlexDeLarge @ 14.02.2010, 19:29:38 ) *
Powiem Ci, że nie stosuje się ORDER BY RAND() gdyż MySQL stosuje tę operację dla każdego wiersza z tabeli po czym dopiero wyciąga odpowiednie wiersze = duże marnotrawienie zasobów.

questionmark.gif
Podpowiem - użyj Zend_Db_Expr, jak w przykładzie:
  1. $res = $db->fetchAll(
  2. 'SELECT * FROM table ORDER BY :random LIMIT :limit',
  3. 'random' => new Zend_Db_Expr('RANDOM()'),
  4. 'limit' => 5
  5. );


Ten post edytował darko 14.02.2010, 20:44:58


--------------------
Nie pomagam na pw, tylko forum.
Go to the top of the page
+Quote Post
kielich
post 15.02.2010, 17:33:20
Post #5





Grupa: Zarejestrowani
Postów: 442
Pomógł: 4
Dołączył: 28.12.2008
Skąd: Warszawa

Ostrzeżenie: (20%)
X----


No dobrze tylko jak pózniej dojść z tym do widoku questionmark.gif Jak to wyświetlić w widoku ?

Napisałem coś takiego ALE strasznie mi się to nie podoba dlatego że: wyświetla mi tylko jeden rekord lecz jako RAND a nie 5 sad.gifa po drugie nie ma tu zachowanej struktury proporcji ZF czy możecie mi powiedzieć jak mogę to obsługiwać aby zadziałało tak jak chce i do tego aby było zgodne z ZF bo to co ja napisał to strasznie mi się nie podoba sad.gif a zrobiłem to tak :

model
  1. <?php
  2. class Application_Model_DbTable_Ocena extends Zend_Db_Table_Abstract
  3. {
  4. protected $_name = 'ocena';
  5.  
  6. public function getLosowaOcena() {
  7.  
  8. $sql = 'SELECT tresc FROM ocena ORDER BY RAND() LIMIT 5';
  9. return $this->getAdapter()->fetchAll($sql);
  10.  
  11.  
  12. }
  13.  
  14.  
  15. }


kontroler
  1. $Ocena = new Application_Model_DbTable_Ocena();
  2. $this->view->Ocena = $Ocena->getLosowaOcena();


oraz widok
  1. <?php foreach($this->Ocena as $ocena); ?>
  2. <?php echo $ocena['tresc']; ?>
  3. <? endforeach; ?>


--------------------
Życie jest jak SESJA kiedyś wygaśnie ....

Jeśli moja odpowiedź jakoś Cię nakierowała lub pomogła kliknij Pomógł
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 Wersja Lo-Fi Aktualny czas: 20.06.2025 - 05:35