🚀 go-pugleaf

RetroBBS NetNews Server

Inspired by RockSolid Light RIP Retro Guy

Thread View: pl.comp.lang.ruby
5 messages
5 total messages Started by Maciej Piechotka Sat, 05 Jan 2008 18:12
ORM i subquering
#880
Author: Maciej Piechotka
Date: Sat, 05 Jan 2008 18:12
23 lines
1805 bytes
Mam takie proste pytanie (zastanawiam się nad wyborem ORM):
Jak w różnych ORM wygląda takie zapytanie(to jest przykład z którym na 
razie 'walczę' potem będą trudniejsze[1]):
SELECT * FROM users WHERE id IN (SELECT user_id FROM posts WHERE priority 
>= 4);

Oczywiście nie chodzi mi o find_by_sql(...) w AR czy DB[...] w Sequel 
(chcę jak najbardziej uniknąć pisania kodu w SQL - łatwiej się IMHO 
pomylić),

[1] Nowe rzeczy poznaje na prostych przykładach w irb a nie na kodzie ;)

PS.
W Sequelu odkryłem ;):
User.filter(:id => Post.filter{:priority >= 4}.select(:user_id))
Czy da się coś takiego zrobić w DataMapper? Albo w AR (nie sądzę ale to by 
było najlepsze)?
Nie chodzi mi oczywiście o przepychanie wszystkiego poprzez tablice w 
railsach.
-- 
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
Re: ORM i subquering
#881
Author: Jaroslaw Zabiello
Date: Sun, 06 Jan 2008 02:41
25 lines
1546 bytes
On Sat, 05 Jan 2008 18:12:47 -0000, Maciej Piechotka  
<uzytkownik2@gmail.com> wrote:

> [1] Nowe rzeczy poznaje na prostych przykładach w irb a nie na kodzie ;)

Na http://code.google.com/p/ruby-sequel/ po prawej "Featured Wiki Pages:"  
i tam są linki do dużej ilości przykładów.

> W Sequelu odkryłem ;):
> User.filter(:id => Post.filter{:priority >= 4}.select(:user_id))

Aby było "id IN(SELECT..." a nie "...id=(SELECT...", musisz wstawić [].  
Można to też budować w kawałkach:

sub = Post.select(:user_id).filter{:priority >=4}
User.filter(:id => [sub])

> Czy da się coś takiego zrobić w DataMapper? Albo w AR

Nie sądzę. Ale możesz popytać się na #datamapper.

-- 
Jarosław Zabiełło
http://blog.zabiello.com
irc://irc.eu.freenode.net/rubyonrails.pl
Re: ORM i subquering
#882
Author: Maciej Piechotka
Date: Sun, 06 Jan 2008 09:46
19 lines
1589 bytes
On Sun, 06 Jan 2008 02:41:48 +0000, Jaroslaw Zabiello wrote:

> Aby było "id IN(SELECT..." a nie "...id=(SELECT...", musisz wstawić [].
> Można to też budować w kawałkach:
> 
> sub = Post.select(:user_id).filter{:priority >=4} User.filter(:id =>
> [sub])

Jesteś pewien? Mi działa bez:

irb> User.filter(:id => Post.filter{:priority >= 4}.select(:user_id)).sql
=> "SELECT * FROM users WHERE (id IN (SELECT user_id FROM posts WHERE 
(priority >= 4)))"

Pozdrawiam
-- 
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
Re: ORM i subquering
#883
Author: Jaroslaw Zabiello
Date: Sun, 06 Jan 2008 15:16
15 lines
1280 bytes
On Sun, 06 Jan 2008 09:46:43 -0000, Maciej Piechotka  
<uzytkownik2@gmail.com> wrote:

> Jesteś pewien? Mi działa bez:
>
> irb> User.filter(:id => Post.filter{:priority >= 4}.select(:user_id)).sql
> => "SELECT * FROM users WHERE (id IN (SELECT user_id FROM posts WHERE
> (priority >= 4)))"

Hmm, faktycznie. Coś musiałem zamieszać, że mi wyskoczyło bez.

-- 
Jarosław Zabiełło
http://blog.zabiello.com
irc://irc.eu.freenode.net/rubyonrails.pl
[OT] Re: ORM i subquering
#884
Author: Maciej Piechotka
Date: Sun, 06 Jan 2008 17:47
22 lines
1826 bytes
On Sun, 06 Jan 2008 15:16:10 +0000, Jaroslaw Zabiello wrote:

> On Sun, 06 Jan 2008 09:46:43 -0000, Maciej Piechotka
> <uzytkownik2@gmail.com> wrote:
> 
>> Jesteś pewien? Mi działa bez:
>>
>> irb> User.filter(:id => Post.filter{:priority >=
>> 4}.select(:user_id)).sql => "SELECT * FROM users WHERE (id IN (SELECT
>> user_id FROM posts WHERE (priority >= 4)))"
> 
> Hmm, faktycznie. Coś musiałem zamieszać, że mi wyskoczyło bez.

W idealnych komputerach nie da się mieć generatora lidzb losowych, w 
prawdziwych to dowolne uruchomienie programu jest takim ;)

Pozdrawiam
PS. Oczywiście nie chodzi mi o pseudolosowe
-- 
I've probably left my head... somewhere. Please wait untill I find it.
Homepage (pl_PL): http://uzytkownik.jogger.pl/
(GNU/)Linux User: #425935 (see http://counter.li.org/)
Thread Navigation

This is a paginated view of messages in the thread with full content displayed inline.

Messages are displayed in chronological order, with the original post highlighted in green.

Use pagination controls to navigate through all messages in large threads.

Back to All Threads