[ruby-it] Alleggerire estrazione dati da tabella

Pietro Giorgianni giorgian a gmail.com
Lun 5 Ott 2009 14:49:40 CEST


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).

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']

poi puoi scrivere:

<% for user in @user %>
  <%= user.login %>
  <%= user['car1'] %>
  <%= user['car2'] %>
<% end %>

in questa maniera ti colleghi al db una volta sola.

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'"...

poi i dialetti sql cambiano, ma una cosa simile dovresti poterla fare
per ogni dbms (anche se ti tocca fare query specifiche).


More information about the Ml mailing list