Zapytanie do bazy

Witam

mając np model Oddzial_, Struktura_, Przychodnia_ chce w jakimś kontrolerze zrobić złozone zapytanie typu…

select oddzial_s.id, oddzial_s.nazwa from oddzial_s,przychodnia_s, struktura_s WHERE przychodnia_s.id=1 AND struktura_s.przychodnia_id=przychodnia_s.id AND oddzial_s.id = struktura_s.oddzial_id

w jakie sposób mogę tego dokonać?
jest jakaś funkcja do której wpisujemy zwykłe zapytanie ‘select’?
Pozdrawiam

Znalazłem coś takiego:

struktura =Oddzial_.find_by_sql("select * from oddzial_s where id=1")

Tylko jak teraz odwołać się do tego…np chciałbym wyświetlić kolumnę ‘nazwa’ tej tabeli…zakładając że pozycji pod tym id jest kilka?

Cos jak:

Oddzial.find(:first, :conditions => ["przychodnia_id = ?, oddzial_id = ?", przychodnia_id, oddzial_id])

Poza tym nazywaj zmienne i klasy po angielsku. “has_many :przychodnias” brzmi okropnie, rowinie zabawnie: “@oddzial.przychodnias.find()” :D.

Przeczytaj cos o ActiveRecord: http://guides.rubyonrails.org/ rozdzial “Models”

A nie da się przy użyciu ‘find_by_sql’? w jaki sposób mogę się odwołać do zwróconych rekordów?

Przy użyciu ‘find’ itp wiem jak to zrobić, ale chodzi mi o bardziej skomplikowane zapytania takiego typu jak to pierwsze…i dlatego chce użyć ‘find_by_sql’.

[quote=michal_sz]A nie da się przy użyciu ‘find_by_sql’? w jaki sposób mogę się odwołać do zwróconych rekordów?

Przy użyciu ‘find’ itp wiem jak to zrobić, ale chodzi mi o bardziej skomplikowane zapytania takiego typu jak to pierwsze…i dlatego chce użyć ‘find_by_sql’.[/quote]
Zapomnij. W Railsach staraj się korzystać z wysokopoziomowych narzędzi (jak właśnie “czysty find”), jedynie w baaardzo skomplikowanych zapytaniach warto używać find_by_sql.

Ok tak spróbuje…a w jaki sposób utworzyć zapytanie takiego typu, gdzie chce aby zwróciło mi wiersze z podanymi kilkoma ‘id’?..jedna tabela zwraca mi kilka wierszy i z nich pobieram id i po tych id w innej tabeli wyszukuje rekordy.

Ustawiasz relacje has_many i belongs_to, później się normalnie odwołujesz -> http://guides.rubyonrails.org/association_basics.html. Railsy sprytnie wszystko cachują więc będzie to wydajne. Ewentualnie możesz skorzystać z join/include.

Patrząc na przykład z linka widzę że zwracane jest kilka zamówień jednego klienta, a teraz mając ‘id’ tych zamówień chce po tych ‘id’ wyszukać wiersze w innej tabeli, jak?

Człowieku, weź, że przeczytaj dokładnie ten przewodnik (albo w wersji polskiej), albo najlepiej zacznij od wprowadzenia do Rails. To oszczędzi Tobie i nam sporo czasu. Zasadniczo - ActiveRecord powstał właśnie po to, bo załatwiać takie typowe problemy. Robienie w takim przypadku zapytania “find_by_sql” jest zdecydowanie nie na miejscu.

Dobra…dzięki…

Przejrzałem wszystkie Twoje posty i wynika z nich prosta sprawa - nie przeczytałeś najbanalniejszego nawet wprowadzenia do Railsów i o pytasz się o każdą pierdołę. RTFM.
Zasobów jest mnóstwo, po polsku, po angielsku, po japońsku też. W przewodnikach, do których masz linki wyżej jest wszystko poukładane i wytłumaczone. Zanim zadasz kolejne pytanie na forum, to zajrzyj właśnie tam.

Ok spoko…już podziękowałem za poradę…zrobiłem bazę danych na zaliczenie i mam ją obudować…a ruby jest mi narzucony…chce to jak najszybciej zrobić i nie wczuwać się w to, bo niezbyt mi się to podoba…ale spoko…po co ta agresja…

To nie jest agresja. Bez przesady. Po prostu jest sporo ludzi, którzy nie traktują swojej roboty, tak jak Ty - byle zdać i zaliczyć. Polskie tłumaczenie powstało dzięki pracy studentów i mojej, jako redaktora. Jak widzę sytuacje podobne do tej, gdzie ktoś idzie na totalną łatwiznę i zadaje pytania o najprostsze sprawy na forum, zamiast poświęcić godzinę na przeczytanie jednego dokumentu, to po prostu reaguję.

Dzięki że mnie oceniasz nie znając mnie…nie traktuje swojej roboty w ten sposób…sam wiesz że informatyka to rozległa dziedzina i wszystkiego wiedzieć nigdy nie będziesz…dlatego wybieram to co uważam że mi się przyda i na czym w przyszłości chce skupić swoją uwagę…nie na wszystko jest czas.

Agresja!?? Odniosłem wrażenie że ludzie chcą ci tutaj raczej pomóc :wink: Jednak okazujesz kompletny brak współpracy. Nie czytasz tego co Ci podpowiadają. Na moje oko to stworzyłeś sobie baze danych i prawdopodobnie całą mase zapytań, które teraz chciałbyś przenieść do AR :wink: gdybyś tylko niebył takim ignorantem i zajrzał troche do dokumentacji ActiveRecord zrozumiał byś że wszystko to co zrobiłeś do tej pory było całkowicie zbędne i za pomocą kilku komend i samego ActiveRecord osiągną byś to samo angażująć znacznie mnie czasu i pracy jaki poświęciłeś do tej pory.

Oceniasz Ruby dokładnie tak samo :wink: nie znając go. Co do czasu patrz post wyżej. To co robisz jest niepotrzebne, nikomu nie zależy tutaj na wysłuchiwaniiu usprawiedliwień.

A tak swoja drogą ciekawe zjawisko :wink: Buntownik przeciwko edukacji informatycznej… tło język Ruby… 3 lata temu bym nie uwierzył w coś takiego. Czasy się naprawde zmieniają.

Nie no ok…z tą agresją może odniosłem mylne wrażenie…przepraszam w takim razie…wiem że ludzie tu pomagają. Baza danych jest jak najbardziej dobrze zaprojektowana i w zasadzie mam 3 zapytania…w sensie te bardziej skomplikowane i zastanawiałem się jak to szybko wrzucić do rubiego…to wszystko.

byś podszedł uczciwie do sprawy i napisał, co chcesz cąłościowo osiągnąć, wrzucił całą scheme bazy i opis czego po stronie ruby(rails) oczekujesz

a moze jakas dobra dusza siądzie i klepnie ci to w przerwie jakiejś sniadaniowej

Choćby z pomocą, ale wolę sam to zrobić…dzięki:)

Jeśli chcesz nadal przepisywać te zapytania na ruby to:
http://sequel.rubyforge.org/
Jeśli chcesz zrobić to jak należy to użyj ActiveRecord.
http://guides.rubyonrails.org/migrations.html tutaj masz opisane jak wyglądaje migracje i jak tworzyc modele
http://guides.rubyonrails.org/association_basics.html a to już było podane, jak tworzyc relacje.