Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [CodeIgniter] Grupowanie i COUNT
Forum PHP.pl > Forum > PHP > Frameworki
markuz
Witam,
Mam problem z grupowaniem wyników i sumowaniem rekordów z dołączonej tabeli.

  1. return $this->db_pg
  2. ->select('texts.*, COUNT(`{PRE}text_views`.`id`) as `views`')
  3. ->join('text_views', 'text_views.user_id = texts.user_id')
  4. ->where(array(
  5. 'texts.user_id' => $userID,
  6. 'text_views.created_at >' => date('y-m-d H:i:s', $from),
  7. 'text_views.created_at <' => date('y-m-d H:i:s', $to),
  8. ))
  9. ->group_by('texts.id')
  10. ->order_by('views', 'DESC')
  11. ->limit($limit)
  12. ->get($this->table);


To zapytanie zwraca rekordy lecz views wynosi tyle samo (suma wszystkich widoków). A chciałbym aby views grupowane było według tekstów (texts.id).

Zwraca:

Kod
nazwa_tekstu | 34
nazwa_tekstu | 34
nazwa_tekstu | 34
...


Powinno:

Kod
nazwa_tekstu | 18
nazwa_tekstu | 14
nazwa_tekstu | 10
...
markonix
Szczerze nie rozumiem. Wynosi tyle samo bo przypisujesz views sumę wszystkich rekordów w tabeli text_views.
markuz
A w jaki sposób przypisać sumę rekordów w tabeli text_views dla poszczególnych rekordów w tabeli views?

Ok. Poradziłem sobie. Głupi błąd jak zawsze ;0

  1. return $this->db_pg
  2. ->select('texts.*, COUNT(`{PRE}text_views`.`id`) as `views`')
  3. ->join('text_views', 'text_views.text_id = texts.id')
  4. ->where(array(
  5. 'texts.user_id' => $userID,
  6. 'text_views.created_at >' => date('y-m-d H:i:s', $from),
  7. 'text_views.created_at <' => date('y-m-d H:i:s', $to),
  8. ))
  9. ->group_by('texts.id')
  10. ->order_by('views', 'DESC')
  11. ->limit($limit)
  12. ->get('texts');


Zamiast łączyć według id użytkownika łączyłem tabele według id tekstu.

Można zamknąć temat.
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.