Hallo,
leider habe ich ein Problem mit ActiveRecord.
Hier ein kurzes Beispiel:
competitors (id, name,score)
has_won_against(id, competitor1,competitor2,price)
Nun möchte ich gerne, die alle Wettbewerber Selektieren, die
- Die mind 2x angetreten sind
- Niemals verloren haben
- und in ihrer Karriere schon mehr als 1000 verdient haben.
Ein SQL-Query dazu würde etwa so aussehen:
SELECT DISTINCT c.id,c.name,c.score FROM (
SELECT id,name,score,sum(h.price),count(h.id)
FROM (has_won_against as h) JOIN (competitors as c) on c.id =
h.competitor1
WHERE c.id not IN (SELECT competitors2 FROM competitors as c1)
GROUP_BY h.competitor1
HAVING sum(h.price) > 1000 AND cound(h.id) > 1
)
Diese Abfrage möchte ich nun gerne mit ActiveRecord umsetzen. Mein Problem
ist, dass ich nicht weiß, wie ich den inneren Query umsehen soll.
Da ein competitor an vielen hbtm-Beziehungen hängt, wird das SELECT und
der JOIN-Teil von ActiveRecord gebaut und die Beziehungen werden
über :include geladen.
Irgendwie müsste ich aber den alias-Namen des ersten competitors kennen, um
den 2. Select in den where-Teil bauen zu können.
Am liebsten wäre es mir jedoch, wenn ich mir über das konkrete SQL keine
Gedanken machen muss, da der ganze Query über Formularparameter gebaut wird.
Gehe ich dann sehr frei mit SQL um, laufe ich u.U. in Escape-Orgien und
halte Resultate, die der OR-Mapper ggf. gar nicht mehr in Objekte packen
kann.
Wie setze ich das am besten mit ActiveRecord um?
Danke,
Keep smiling
yanosz