Ostatnio doprowadziła mnie do szału mała błahostka, miałem do policzenia liczbę wierszy wyniku MySQL, było to proste złączenie dwóch tabel. Myślałem, że nie będę miał z tym większego problemu.
Jednak okazało się że miałem i to spory. Zapytanie MySql które miałem wykonać było takie (banalne i proste):
SELECT count(users.id) as num FROM `users`,`users_office_data` WHERE id_user=users.id
Jak widać dwie tabele złączone po kluczu i cała filozofia. Miałem wykonać to w jednej z klas modelu danych, no i tu zaczęły się schody. Przekopałem mnóstwo stron bo za cholerę nie umiałem tego wykonać, nie wnikajcie dlaczego, początkujący niech sami spróbują
Jedno z rozwiązań znalazłem na necie a jedno pomógł mi rozwiązać Pan deallas z forum zend-frameworl.pl. Pierwsze przedstawię to co samemu udało mi się ustalić:
$db = Zend_Db_Table::getDefaultAdapter();
$select = $db->query("SELECT count(users.id) as num FROM `users`,users_office_data WHERE id_user=users.id");
$row = $select->fetchAll();
echo $row[0]['num'];
Jak widać od biedy może być, Pan deallas podał swój kawałek kodu który bardziej mi się podobał, ale to już kwestia gustu.
$select = $this->select();
$select->from('users', array('count(users.id) as num'))
->from('users_office_data', array())
->setIntegrityCheck(false)
->where('id_user = users.id');
$result = $this->fetchRow($select);
echo $result->num;
Oczywiście te $this można użyć ale zadziała tylko w klasie modelu w innym wypadku trzeba by ten kod nieco zmodyfikować dodając coś takiego:
$users = My_Model();
$select = $users->select();
$select->from('users', array('count(users.id) as num'))
->from('users_office_data', array())
->setIntegrityCheck(false)
->where('id_user = users.id');
$result = $users->fetchRow($select);
echo $result->num;
Powiem tylko tyle, że z tego co pamiętam bo już różne wersje kodu testowałem to gdy nie było złączenia z inną tabelą to jakoś nie miałem większych problemów wykonać count, problem się pojawił gdy następowało złączenie a ja dziwiłem się czemu mi to nie działa i w żaden sposób nie podaje wyniku bądź zwraca błąd.
Kwiecień 26th, 2010 at 20:39
Fajny tutek. Konkretny, bez lania wody i bardzo przydatny.
Mam nadzieję, że będzie kontynuowany.
Lipiec 19th, 2010 at 12:37
Działa!! dzieki
Sierpień 26th, 2010 at 10:05
Siema! Dobry tutek, ale jak dla początkujących to mogłoby być ciut więcej opisów i wyjaśnień. Ale jest OK, tak trzymajcie !
Październik 30th, 2011 at 15:41
Mała kosmetyka
3 $select->from(‘users’, array(‘num’ => ‘count(users.id)’))