In meiner Rails-Anwendung verwenden, Ich bin eine Union-Abfrage durchführen Model.find_by_query mitUnterschied in dem Abfrageergebnis während Model.find_by_query in Rails
Da Tabellen haben unterschiedliche Anzahl von Spalten, i virtuelle Spalten verwendet.
Meine Abfrage sieht aus wie
"SELECT id, 'N/a' AS start_time, 'N/a' AS end_time, 'N/a' AS
STATUS , project_id, spent_on AS DATE, user_id, hours AS spent_time, comments AS
COMMENT , activity_id
FROM table1
WHERE spent_on > DATE_ADD(CURDATE() , INTERVAL -30
DAY)
AND user_id =80
UNION (
SELECT id, start_time, end_time,
STATUS , project_id, DATE, user_id, spent_time,
COMMENT , activity_id
FROM table2
WHERE user_id =80
AND DATE > DATE_ADD(CURDATE() , INTERVAL -30 DAY)
)"
ich eine korrekte Ausgabe bin immer wenn die Abfrage in MySQL läuft, aber die gleiche Abfrage mit Model.find_by_sql Laufen gibt mir verschiedene Ausgabe
Dies ist der Ausgang i läuft die Abfrage in mysql
während Model.find_by ist immer _sql() gibt nur wenige Spalten,
<Task id: 6153, start_time: "2000-01-01 00:00:00", end_time: "2000-01-01 00:00:00", project_id: 6, spent_time: 10.0, user_id: 80, activity_id: 9>
Beachten Sie auch, dass es auch eine Diskrepanz in den Werten. anstelle von 'N/a' bekomme ich "2000-01-01 00:00:00" in Zeitfeldern.
Ich fand heraus, dass ‚N/A‘ umgewandelt wird immer auf „2000-01-01 00:00:00“, weil Feldtyp ist die Zeit. Rails konvertiert es in einen Zeitwert.
Aber ich dies außer Kraft setzen kann?
Wie kann ich gewünschte Ausgabe zu erhalten? jede andere Möglichkeit zum Ausführen solcher rohen Abfragen?
Kommentare bitte?
Thnx.
Welche Version von Schienen arbeiten Sie? –
seine Rails 2.3.14 –
Ich fand heraus, dass die Spalten ignoriert wurden, die mit Model nicht übereinstimmten, wenn Model.find_by_sql() ausgeführt wurde. –