Ver 14.14 Distrib 5.1.73
Active Record (MYSQL) - Wählen Sie unterschiedliche IDs aus mehreren Spalten
activerecord (4.1.14)
ich ein Handelsmodell haben, die zu einem Kreditgeber und Kreditnehmer gehört. Ich möchte alle uniq-Kontrahenten zu den Geschäften einer Institution in einer SQL-Abfrage finden. Die Abfrage unten funktioniert, aber nur, weil ich abflachen & unique-ify das Array nach dem SQL-Abfrage:
Trade.where("borrower_id = :id OR lender_id = :id", id: institution.id).uniq.pluck(:lender_id, :borrower_id).flatten.uniq
(Ich weiß, das die Institution schließt sich, so dass wir zu normalisieren, nachdem sie mit [1,2,3,4] - [1]
)
Aber was Ich würde gerne eine Group By
Klausel oder etwas verwenden, so dass meine SQL-Abfrage den flatten.uniq
Teil handhabt.
Die unten funktioniert nicht, weil es eine verschachtelte Reihe von einzigartigen Kombinationen von lender_id
und borrower_id
zurück:
Trade.where("borrower_id = :id OR lender_id = :id", id: institution.id).group(:lender_id, :borrower_id).uniq.pluck(:lender_id, :borrower_id)
=> [[1,2], [1,3], [2,3]]
Ich möchte eine flache Anordnung von GERADE eindeutigen IDs: [1,2,3]
Irgendwelche Ideen? Vielen Dank!
Dank für die Beantwortung. Ich benutzte eine GROUP BY wegen ähnlicher SO-Posts (http://stackoverflow.com/questions/12188027/mysql-select-distinct-multiple-columns?rq=1) .... Ich bin offen für was auch immer funktioniert! Davon abgesehen führt Ihre Abfrage zu einem verschachtelten Array-Return-Set, das eindeutige _combinations_ von lender_id und borrower_id enthält (zB [[1, 2], [1, 3]]) ... Ich brauche nur die eindeutigen IDs als flaches Array (zB [1,2,3]). – daino3
Ich würde diese Art der Verarbeitung in der App tun. – Strawberry
LOL, das mache ich ('flatten.uniq'), aber ich möchte lernen, wie ich das über SQL/ActiveRecord (daher die Frage) machen kann. Scheint wie ein ziemlich relevanter/häufiger Anwendungsfall. – daino3