Zapytanie do dwoch tabel

mam dwie tabele
users(id,imie,nazwisko,mail)
tasks(id,user_id,tytul,opis)

jak zrobic zapytanie do dwoch tabel
SELECT * FROM users,tasks WHERE users.id = tasks.user_id

i potem wyciagnac mail danego usera tak zeby mail

id zadania, tytul zadania, id usera ktory dodal zadanie, i jego mail

http://dev.mysql.com/doc/refman/5.1/en/left-join-optimization.html

spoko tylko ja to chcialem w railsach zrobic :confused:

Find tasks i w tym include users.

User.find(:all, :include => :task)

User.find(:all, :include => :task)[/quote]
cos mi to za bardzo nie chce dzialac … wpisalem tak
w controllerze

[quote]def list
@task_pages, @tasks = paginate [:tasks], :per_page => 10, :order_by => ‘date DESC’
@user_pages, @users = paginate [:users], :per_page => 10, :order_by => ‘id DESC’

@tasks = Task.find(:all, :conditions => ["user_id=?", User.id] , :include => :user )

end[/quote]
a potem w pliku list.rhtml

[quote]<% for task in @tasks %>

data - <%=h task.date%> | user id -<%=h task.user_id%> | <%=h user.email %>

<% end %>[/quote]
i nic sie nie wyswietla

[quote=cornelius]@tasks = Task.find(:all, :conditions => [“user_id=?”, User.id] , :include => :user )
i nic sie nie wyswietla[/quote]
Wydaje mi się, że niepotrzebnie przekombinowujesz, mając w podświadomości język SQL. Zapomnij o SQL i zacznij myśleć o obiektach i ORM.

Jak masz już usera, w zmiennej @user, to chyba wystarczy:

@tasks = @user.tasks

Zresztą wszędzie, gdzie masz relacje, to możesz się tak odwoływać. W drugą stronę też:

@user = @task.user

Dobrze kombinuję?

Wystarczy napisać

@tasks = Task.find :all

Następnie możesz napisać gdziekolwiek w kodzie np. @tasks[3].user i to zadziała. Pewien “problem” polega na tym, że każda taka linijka generuje zapytanie SQL, stąd opcja “:include => :user” pozwala pobrać wszystkich użytkowników w jednym zapytaniu (pytanie czy akurat potrzebujesz wszystkich tych danych). Tak czy inaczej dopóki nie oswoisz się z ActiveRecord nie myśl o “:include”, bo wszyscy wiemy, że “przedwczesna optymalizacja jest źródłem wszelkiego zła”.

Swoją drogą paginacją też bym się zajął na końcu, szczególnie że tak naprawdę nie wiadomo jak ją robić. Ta zaimplmentowana w Rails jest ponoć do bani i będzie usunięta/zastąpiona. Czytałem kiedyś o tym w “10 things you shouldn’t do in rails”. Przy większym ruchu potrafi powiesić serwer czy coś takiego. Chyba lepiej jest używać bezpośrednio obiektu Paginator albo któregoś z pluginów (widziałem przynajmniej jeden uniwersalny paginator dla ruby). Tak czy inaczej też jest to bajer, którym martwiłbym się na końcu.

Pozdrawiam,

Benol