Skocz do zawartości

Łączenie zapytań w KOHANA


Recommended Posts

Mam problem z zapytaniem w kohanie. Mam 3 tabele - users połączoną z kategoriami i te kategorie połączone z artykułami. Chcę policzyć wszystkich użytkowników, wyłączając adminów oraz kategorie nienależące do adminów i tak samo artykuły. W tabeli users mam sprawdzanie czy konto ma uprawnienia admina.

Jak mam wyciągnąć liczbę kategorii oraz artykułów nienależących do adminów?

Użytkowników to pikuś, robię:

$users = ORM::factory('user')->where('admin','=',false)->find_all();
echo count($users);

P.S. Wersja kohany to 3.2

Link do komentarza
Udostępnij na innych stronach

Nie wiem jak działa ten ORM z Kohany... ale takie rozwiązanie, które napisałeś będzie baaardzo nie wydajne: pobierasz wszystkich userów po to, aby ich policzyć. W surowym MySQL do liczenia służą funkcję typu COUNT(), np.

SELECT COUNT(*) FROM users

A do liczenia wg kategorii będzie to coś w rodzaju:

SELECT COUNT(*) FROM articles GROUP BY author_id;

Ale podkreślam: to, co napisałem wyżej to są polecenia w języku SQL. Pewnie możesz je w jakiś sposób wkomponować w kod, ale z tego, co piszesz, wynika, że Twój framework udostępnia własny ORM - do bardziej automatycznego mapowania relacji sqlowych na obiekty. Może po hasłach kohana select count albo kohana select count group da radę wygooglać jakieś przykłady?

Link do komentarza
Udostępnij na innych stronach

1) count_all() działa w 3.2, więc możesz sobie tak wyciągać liczbę rekordów, zamiast wywoływać funkcję count().

2) Co do Twojego problemu, zainteresowałbym się metodą ORM -> join(), a zapytanie wykonał na zasadzie:

select count(*) from `categories` left join `users` on categories.user_id = users.id where admin = false
Link do komentarza
Udostępnij na innych stronach

Hej jeśli chodzi o liczenie wpisów w tabeli to :

$users_count = ORM::factory('user')->where('admin','=',false)->count_all();

działa bez problemu :)

Jeśli zaś chcesz wyciągnąć np. liste kategorii dla danego admina to tutaj przydał by się dane do tego jak masz baze zbudowaną. Dokładnie tak jak powiedział @esse tylko przerobione na kohane

ORM::factory('user')->join('category')->on('user.id','=','category.user_id')->join('article')->on('article.category_id','=','category.id')->where('user.admin','=',0)->count_all();
Link do komentarza
Udostępnij na innych stronach

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Gość
Odpowiedz...

×   Wkleiłeś zawartość bez formatowania.   Usuń formatowanie

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Utwórz nowe...