[ruby-it] Alleggerire estrazione dati da tabella

Daneel Olivaw daneel.olivaw.r a gmail.com
Lun 5 Ott 2009 15:20:47 CEST


Pietro Giorgianni wrote:
> Il 05 ottobre 2009 14.13, Daneel Olivaw <daneel.olivaw.r a gmail.com> ha 
> scritto:
>> <% for user in @user %>
>> �<td><%= user.login %></td>
>> �<% car1 = Objects.count(:conditions => "caratt1= '1'and user.id =
>> '#{user.id}'") %>
>> �<% car2 = Objects.count(:conditions => "caratt2= '1'and user.id =
>> '#{user.id}'") %>
> 
> il problema pi� grosso, qui, � che stai facendo una query alla volta
> (e ogni volta reinizi la connessione col db, mandi la query, aspetti
> il risultato e lo converti).

E comunque questo sistema è molto più veloce che caricare tutta la 
tabella in un'array e poi analizzarla, come dicevo prima.

> dovresti cercare di fare meno query. se stai usando mysql potresti fare 
> cos�:
@user = User.find_by_sql ["select *, (select count(*) from objects
> where objects.user_id = users.id and caratt1=?) as car1, (select
> count(*) from objects where objects.user_id = users.id and caratt2=?)
> as car2) from users", '1', '1']

Cioè fare un'unica query in linguaggio sql in cui conto tutto ciò che mi 
serve... wow! si vede che sono alle prime armi, non c'ero arrivato :-)

> 
> poi puoi scrivere:
> 
> <% for user in @user %>
>   <%= user.login %>
>   <%= user['car1'] %>
>   <%= user['car2'] %>
> <% end %>
> 
> in questa maniera ti colleghi al db una volta sola.

Proverò.

> NOTA: ho provato qui da me ma con nomi diversi; riportando i nomi che
> hai usato tu potrei aver fatto errori di battitura e comunque non sono
> sicuro di aver capito cos'� "1" in "caratt1='1'"...

Beh, ho semplificato brutalmente il codice, quindi sicuramente qualche 
boiata ci sarà.

Per quanto riguarda quel "caratt1='1'", sta ad indicare che per 
quell'oggetto la caratteristica booleana "caratt1" ha valore "vero", 
solo che se faccio una elaborazione in ruby posso definirlo 
semplicemente con "==true", mentre se gli passo il comando sql ho visto 
che devo proprio dirgli "='1'", altrimenti non funziona... almeno stando 
alla mia ben poca esperienza.

Grazie.
-- 
Posted via http://www.ruby-forum.com/.


More information about the Ml mailing list