2010-09-07 6 views

Antwort

24

Man könnte es auf dem cosole versuchen:

 
script/console # rails 2 
rails console # rails 3 

Code in der Konsole eingeben und Sie erhalten:

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

so dass es Sie es mit

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

result.first gibt nur die erste Zeile zurück, nicht den ersten Wert. Diese Zeile besteht aus einem Hash mit numerischem und benanntem Zugriff.

+1

Danke jigfox. Für das Ergebnis '[{0 =>" ABC "," 'ABC "=>" ABC "}]', warum gibt es 2 "ABC" s? und, was ist die Bedeutung von "0" und ersten "" ABC ""? Ist einer von ihnen ein Spaltenname? Wie bei der Abfrage im MySQL Query Browser lautet der Spaltenname "ABC" und der Wert ist die erste Zeile "ABC". – ohho

+2

Ergebnis ist '# ' anstelle von '[{0 =>" ABC "," 'ABC' "=>" ABC "}]'. Was gibt? – ohho

+0

* "Warum gibt es 2" ABC "s und was bedeutet 0 und zuerst" ABC "?"1 ist zugänglich durch die Spaltennummer" 1 "und 1 ist zugänglich durch den Spaltennamen" ABC ". – jigfox

19

Versuchen:

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

Ich würde nicht raten, Herumspielen mit der zugrunde liegenden Datenbank-Code, wenn Du brauchst das nicht.

+0

Danke Shadwell. Ich gebe jigfox die Antwort, da ich nach der allgemeinen Rückgabestruktur einer MySQL-Abfrage suche, die nicht auf einen Wert beschränkt ist. Ein 'nützliches' Guthaben für Sie ;-) – ohho

+1

mit 500k + Aufzeichnungen können Sie wirklich nicht alles wegen der Geschwindigkeit wählen. Dies ist normalerweise auch der Grund dafür, dass Menschen dazu neigen, connection.execute zu verwenden, damit sie das verarbeitete SQL optimieren können. –

19

Anstelle .execute könnten Sie .select_all verwenden, dies wird ein Array mit dem Ergebnis zurückgeben.

So verwenden:

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

Dies liefert ein ActiveRecord :: Ergebnis. – Donato

0

Ich habe eine Tabelle mit einigen Daten, bei denen es eine Spalte Der Status benannt ist, die Werte wie closed enthält, in progress, etc ..

Also, wenn ich tun der Code wie: ActiveRecord::Base.connection.select_all "select DISTINCT Status from tickets"

ich folgendes:

StatusclosedStatusin progressStatusassignedStatusnewStatussolved

Das Problem ist der Spaltenname wird vor jedem Wert angehängt. Wie bekomme ich die Werte alleine?

+1

Gelöst es mit 'ActiveRecord :: Base.connection.select_values" wählen Sie DISTINCT Status von Tickets "' Überprüfen Sie diesen Link für verschiedene 'connection.' Methoden: http://api.rubyonrails.org/classes/ActiveRecord/ConnectionAdapters/DatabaseStatements.html –