2010-09-07 13 views

risposta

24

Si potrebbe provare sul cosole:

 
script/console # rails 2 
rails console # rails 3 

inserire il codice nella console e si ottiene:

 
irb> result = ActiveRecord::Base.connection.execute("select 'ABC'") 
=> [{0=>"ABC", "'ABC'"=>"ABC"}] 

in modo che si ottiene con

result.first[0] 
# or 
result.first['ABC'] 

result.first restituisce solo la prima riga, non il primo valore. Questa riga consiste in un hash con accesso numerico e con nome.

+1

Grazie jigfox. Per il risultato '[{0 =>" ABC "," 'ABC' "=>" ABC "}]', perché ci sono 2 "ABC" s? e, qual è il significato di '0' e prima' "'ABC'" ''? Uno di questi è un nome di colonna? Come quando faccio la query in MySQL Query Browser, il nome della colonna è 'ABC' e il valore è la prima riga è' ABC'. – ohho

+2

risultato è '# ' invece di '[{0 =>" ABC "," 'ABC' "=>" ABC "}]'. Cosa dà? – ohho

+0

* "perché c'è 2" ABC "s? E, qual è il significato di 0 e il primo" 'ABC' "?"* Uno è accessibile con il numero di colonna" 1 "e uno è accessibile con il nome della colonna" ABC " – jigfox

19

Prova:

result = ActiveRecord::Base.connection.select_value("select 'ABC'") 

Non consiglierei guai con il codice di database sottostante, se non è necessario.

+0

Grazie Shadwell. Dando credito alla risposta a jigfox mentre cerco la struttura generale dei resi da una query MySQL, non limitata a un valore. Un credito 'utile' per te ;-) – ohho

+1

con 500k + record non puoi davvero selezionare tutto a causa della velocità. Questo di solito è anche la ragione per cui le persone tendono a utilizzare connection.execute in modo che possano ottimizzare l'SQL in elaborazione. –

19

Invece di .execute è possibile utilizzare .select_all, questo restituirà un array con il risultato.

in modo da utilizzare:

ActiveRecord::Base.connection.select_all("select 'ABC'") 
+1

Questo restituisce un ActiveRecord :: Result – Donato

0

Ho una tabella con alcuni dati in cui v'è una colonna denominata Stato che contiene i valori come closed, in progress, ecc ..

Così, quando lo faccio il codice come: ActiveRecord::Base.connection.select_all "select DISTINCT Status from tickets"

ottengo il seguente:

StatusclosedStatusin progressStatusassignedStatusnewStatussolved

Il problema è che il nome della colonna viene aggiunto prima di ogni valore. Come ottengo i valori da solo?

+1

Risolto usando 'ActiveRecord :: Base.connection.select_values" seleziona DISTINCT Status dai ticket "' Controlla questo link per vari metodi 'connection': http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html –

Problemi correlati