mar 14

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.

Autor siema \\ tagi: , , , ,



4 Odpowiedzi do “Męczarnia z count – jak policzyć rekordy?”

  1. Gość napisał(a):

    Fajny tutek. Konkretny, bez lania wody i bardzo przydatny.

    Mam nadzieję, że będzie kontynuowany.

  2. kubix napisał(a):

    Działa!! dzieki

  3. Wincenty napisał(a):

    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 !

  4. cudny napisał(a):

    Mała kosmetyka :D

    3 $select->from(‘users’, array(‘num’ => ‘count(users.id)’))