Gordion Napisano Czerwiec 12, 2013 Zgłoś Udostępnij Napisano Czerwiec 12, 2013 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 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
ppawel Napisano Czerwiec 12, 2013 Zgłoś Udostępnij Napisano Czerwiec 12, 2013 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? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Gordion Napisano Czerwiec 12, 2013 Autor Zgłoś Udostępnij Napisano Czerwiec 12, 2013 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. Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
ulcior Napisano Czerwiec 12, 2013 Zgłoś Udostępnij Napisano Czerwiec 12, 2013 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 Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Gordion Napisano Czerwiec 12, 2013 Autor Zgłoś Udostępnij Napisano Czerwiec 12, 2013 OK, a jeszcze jak wyciągnąć artykuły jeśli te dopiero mają powiązanie z kategoriami? Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
esse Napisano Czerwiec 12, 2013 Zgłoś Udostępnij Napisano Czerwiec 12, 2013 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 ;) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Gordion Napisano Czerwiec 12, 2013 Autor Zgłoś Udostępnij Napisano Czerwiec 12, 2013 Dzięki. Będę te zapytanie przekształcał na ORM ;) Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
warzyw Napisano Czerwiec 12, 2013 Zgłoś Udostępnij Napisano Czerwiec 12, 2013 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(); Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Gordion Napisano Czerwiec 12, 2013 Autor Zgłoś Udostępnij Napisano Czerwiec 12, 2013 Ok. Udało mi się :) Dzięki Wam za pomoc :) Gdzie tu można oznaczyć pytanie jako solved? :> Edit: Znalazłem :D Cytuj Link do komentarza Udostępnij na innych stronach More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.