Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZendFramework] Ilość rekordów w tabeli
Forum PHP.pl > Forum > PHP > Frameworki
in5ane
Cześć, jak mogę sprawdzić ilość rekordów w tabeli dla zapytania:
  1. <?php
  2. $announcements = new announcements();
  3. $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC');
  4. ?>



Szukałem w dokumentacji, ale nie mogłem nic znaleźć ;/

Z góry dzięki.
omeck
Nie wiem, jak wygląda Twój model announcements(); ale jeśli korzystasz z Zend_Db, to metoda select zwraca obiekt Zend_Db_Rowset czy jakoś tak tongue.gif który chyba implementuje interfejs Countable.... podsumowująć uzyj funkcji count:

  1. <?php
  2. $announcements = new announcements();
  3. $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC');
  4. echo 'liczba rekordów: ' . count($select);
  5. ?>


ale mogę się mylić...
in5ane
Nie śmiga, wyświetla mi cały czas: "1".


W announcements mam:
  1. <?php
  2. class Announcements extends Zend_Db_Table {
  3.    protected $_name = 'announcements';
  4. }
  5. ?>


Cały kod odpowiadający za pobieranie:
  1. <?php
  2. $announcements = new announcements();
  3.        $time = time() - $time_from_base; // pod tą drugą zmienną jest czas z bazy (w sekundach) (tzn. ile czasu mają być wyświetlane ogłoszenia)
  4.        $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC');
  5.        $this->view->ilosc = count($select); // dopisane
  6.        $paginator = Zend_Paginator::factory($select)->setCurrentPageNumber($this->_getParam('page'))->setItemCountPerPage($announcementsPerPage)->setPageRange(5);
  7.        $this->view->paginator = $paginator;
  8. ?>
phpion
A nie możesz zrobić tego tradycyjnie czyli puścić SELECT COUNT(*), a potem SELECT * dla określonego offsetu i limitu?
in5ane
No niby mogę, niby to mogę nawet nie używać Zend_db ;/
No właśnie mnie chodzi o to, aby to zrobić za pomocą Zenda, ale nie wiem jak (dokumentacja jest moim zdaniem dla początkujących słaba).

Wykombinowałem w taki sposób, trochę po omacku, ale chyba inaczej się nie da:
  1. <?php
  2. $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC');
  3.        $this->view->countannouncements = count($announcements->fetchAll($select));
  4. ?>

Żeby zliczyć rekordy, trzeba było je pobrać.

---

Aby nie tworzyć nowego tematu, napiszę tutaj.

Chodzi mi o to, aby kolorować co drugi wiersz, no i jest problem, bo cały czas mam jeden kolor. Zrobiłem to tak:
  1. <?php
  2. $countannouncements = count($announcements->fetchAll($select)); // ilość rekordów
  3.            if ($countannouncements % 2 == 0) {
  4.                $this->view->styleannouncements = 'announcements_link_1'; // klasa stylu
  5.            } else {
  6.                $this->view->styleannouncements = 'announcements_link_2'; // klasa stylu
  7.            }
  8. ?>


Najpierw próbowałem utworzyć IF'a w widoku, ale było to samo (cały czas jeden kolor).

Wie ktoś może czemu to nie działa?

@edit: jeżeli jest parzysta liczba rekordów to wyświetla pierwszy styl, a jeżeli jest nieparzysta liczba rekordów, to wyświetla drugi styl.
phpion
Jak to czemu tak działa? Bo taki napisałeś kod. W zależności od ŁĄCZNEJ liczby rekordów przypisujesz odpowiedni styl do danej zmiennej. Aby przeplatać kolory w tabeli musisz użyć kodu w widoku dzieląc przez 2 indeksy tablicy w kolejnych jej iteracjach.

PS: puszczanie count() w PHP na wszystkich pobranych rekordach jest raczej słabym rozwiązaniem jeśli chodzi o wydajność...
in5ane
Próbowałem tak (bazowałem na jakiś gotowych):
  1. <?php for ($i = 0; $i < $this->countannouncements; $i++) : ?>
  2.                <?php if ($i % 2 == 0) : ?>
  3.                    <tr class="announcements_link_1">
  4.                        <td style="padding: 5px 10px 5px 10px;"><a href="<?php echo $this->baseUrl; ?>/announcements/show/id/<?php echo $row->id; ?>" style="display: block;"><?php echo $row->title; ?></a></td>
  5.                        <td style="padding: 5px 10px 5px 10px;"><a href="<?php echo $this->baseUrl; ?>/announcements/show/id/<?php echo $row->id; ?>" style="display: block;"><?php $date = $row->date; echo date('d.m.Y', $date).'r.'. date(', H:i', $date); ?></a></td>
  6.                    </tr>
  7.                <?php else : ?>
  8.                    <tr class="announcements_link_2">
  9.                        <td style="padding: 5px 10px 5px 10px;"><a href="<?php echo $this->baseUrl; ?>/announcements/show/id/<?php echo $row->id; ?>" style="display: block;"><?php echo $row->title; ?></a></td>
  10.                        <td style="padding: 5px 10px 5px 10px;"><a href="<?php echo $this->baseUrl; ?>/announcements/show/id/<?php echo $row->id; ?>" style="display: block;"><?php $date = $row->date; echo date('d.m.Y', $date).'r.'. date(', H:i', $date); ?></a></td>
  11.                    </tr>
  12.                <?php endif; ?>
  13.            <?php endfor; ?>


Ale wychodzi taki syf:
ert16
Cytat(in5ane @ 16.07.2009, 16:48:53 ) *
Cześć, jak mogę sprawdzić ilość rekordów w tabeli dla zapytania:
  1. <?php
  2. $announcements = new announcements();
  3. $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC');
  4. ?>

Szukałem w dokumentacji, ale nie mogłem nic znaleźć ;/

Z góry dzięki.


Jeśli chcesz pobrać dane, to
  1. <?php
  2. $announcements = new announcements();
  3. $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC');
  4. $odp=$announcements->fetchAll($select)->count();
  5. ?>


Jeśli jednak chciałbyś pobrać tylko i wyłącznie liczbę , to jakoś tak :
  1. <?php
  2. $announcements = new announcements();
  3. $select = $announcements->select()->where('date BETWEEN '.$time.' AND '.time().'')->order('id DESC') -> columns(
  4. array( 'count' => new Zend_Db_Expr('COUNT(*)'));
  5. $odp=$announcements->fetchRow($select);
  6. ?>


Nie testowałem, ale mam nadzieję że dobrze Cię nakierowałem.
melkorm
Cytat
Chodzi mi o to, aby kolorować co drugi wiersz, no i jest problem, bo cały czas mam jeden kolor. Zrobiłem to tak:


Manual - Helpers - 60.4.1.2. Cycle Helper

Przykład mówi wszystko.
in5ane
Cytat(melkorm @ 17.07.2009, 07:58:58 ) *


Wielkie dzięki. W tej dokumentacji wszystko jest tak upchane dziwnie tongue.gif

Jeszcze raz dzięki ;-)
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.