Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [ZendFramework] Ilość rekordów w tabeli
in5ane
post
Post #1





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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.
Go to the top of the page
+Quote Post
omeck
post
Post #2





Grupa: Zarejestrowani
Postów: 79
Pomógł: 7
Dołączył: 2.07.2005
Skąd: Lublin

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


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 (IMG:http://forum.php.pl/style_emoticons/default/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ć...
Go to the top of the page
+Quote Post
in5ane
post
Post #3





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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. ?>
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




A nie możesz zrobić tego tradycyjnie czyli puścić SELECT COUNT(*), a potem SELECT * dla określonego offsetu i limitu?
Go to the top of the page
+Quote Post
in5ane
post
Post #5





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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.

Ten post edytował in5ane 16.07.2009, 21:11:35
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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ść...
Go to the top of the page
+Quote Post
in5ane
post
Post #7





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


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:
(IMG:http://xs941.xs.to/xs941/09294/bez_tytu__322_u470.gif)
Go to the top of the page
+Quote Post
ert16
post
Post #8





Grupa: Zarejestrowani
Postów: 26
Pomógł: 5
Dołączył: 4.02.2005
Skąd: Kraków

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


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.
Go to the top of the page
+Quote Post
melkorm
post
Post #9





Grupa: Zarejestrowani
Postów: 1 366
Pomógł: 261
Dołączył: 23.09.2008
Skąd: Bydgoszcz

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


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.

Ten post edytował melkorm 17.07.2009, 08:59:16
Go to the top of the page
+Quote Post
in5ane
post
Post #10





Grupa: Zarejestrowani
Postów: 1 335
Pomógł: 34
Dołączył: 9.11.2005
Skąd: Wrocław

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


Cytat(melkorm @ 17.07.2009, 07:58:58 ) *


Wielkie dzięki. W tej dokumentacji wszystko jest tak upchane dziwnie (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

Jeszcze raz dzięki ;-)
Go to the top of the page
+Quote Post

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: 20.12.2025 - 20:35