Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [MySQL][PHP]ZEND i zapytanie
kielich
post
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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
AlexDeLarge
post
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
Go to the top of the page
+Quote Post
darko
post
Post #3





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.

(IMG:style_emoticons/default/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
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: 18.10.2025 - 14:24