Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]ZEND i zapytanie
Forum PHP.pl > Forum > Przedszkole
kielich
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
AlexDeLarge
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ę.
kielich
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
...

darko
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. );
kielich
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; ?>
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.