Skocz do zawartości

Recommended Posts

Napisano

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

Napisano

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?

Napisano

Dopiero zaczynam z tym ORM, muszę sprawdzić czy jest count_all() zamiast find_all().

A ten Twój select nie wyświetli mi wszystkich artykułów danego użytkownika? A mi chodzi o policzenie wszystkich artykułów, w których użytkownicy są bez uprawnień admina.

Napisano

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
Napisano

artykuły nienależące do adminów (mysql):

SELECT COUNT(*) FROM users JOIN categories ON users.id = categories.user_id JOIN articles ON articles.category_id = categories.id WHERE users.admin = 0;

kohany nie znam, ale tym zapytaniem to policzysz ;)

Napisano

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();

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...