Ja PostgreSQL arbeite mit GROUP richtig im Gegensatz zu MySQL :D
Ich habe jetzt nicht akles im Detail gelesen, aber DISTINCT arbeitet
auch unterschiedlich.

"DISINCT(disinct_felder) sonstige_felder" vllt hilft dir das ja, aber
du scheinst ja direkt auf mysql gewechselt zu sein.

MySQL selektiert beim GroupBy einfach auch die nicht gegroupten Felder
mit was Inhaltlich falsch ist, aber öfters gewollt ist.
Dafür ist eigentlich der DISTINCT Befehlt gedacht, dieser ist aber
unter MySQL wie der GROUP ByBefehlt implementiert. Dieser beachtet
dann auch unter PostgreSQL sortierungen!!

lg marco


Am 10. März 2010 09:10 schrieb Tim Keller <tim.kel...@innoq.com>:
> Hi Tobias,
>
> habe nicht gesehen das Du mit PostgreSQL arbeitest. Auf die Schnelle
> habe ich folgenden Forumsbeitrag gefunden:
>
> http://railsforum.com/viewtopic.php?id=36104
>
> Vielleicht hilft diese Lösung - kann ich aber nicht beurteilen da ich kein
> PostgreSQL nutze.
>
> Viele Grüße
> Tim
>
> Am 10.03.2010 um 08:52 schrieb Tobias Weiß:
>
>> Unter Postgres funktioniert das group so nicht. Ich habe die ganze
>> Anwendung mal auf MySql umgezogen, da gibt es keine Probleme. Sollte
>> sich die Datenbankabstraktion nicht eigentlich darum kümmern, dass
>> sowas nicht passiert?
>>
>> Grüße, Tobi
>>
>> Am 09.03.10 schrieb Tim Keller <tim.kel...@innoq.com>:
>>>
>>> Hi Tobias,
>>>
>>>>>> Hallo zusammen,
>>>>>>
>>>>>> ich stehe gerade etwas auf dem Schlauch, vielleicht kann mir jemand
>>>>>> weiterhelfen:
>>>>>>
>>>>>> Ich habe zwei Models:
>>>>>>
>>>>>> Author.rb
>>>>>>
>>>>>> Book.rb
>>>>>>  has_many :authors
>>>>>>
>>>>>> In book.rb habe ich einen named_scope, um die gefundenen Bücher nach
>>>>>> einem bestimmten Parameter zu sortieren. (Später wird der noch mit
>>>>>> anderen Scopes zu einer Filterkette verknüpft)
>>>>>>
>>>>>> named_scope :sorted, lambda {|sort,order| {
>>>>>>   :joins => :authors,
>>>>>>   :order => ["LOWER(" + sort  + ") " + order.upcase]}
>>>>>> }
>>>>>>
>>>>>> Mein Problem:
>>>>>> Ich möchte eine Liste mit allen Büchern haben, aber jedes Buch soll
>>>>>> nur einmal in der Liste erscheinen, egal wieviel Autoren es hat.
>>>>>> Book.sorted liefert mir jedoch Duplikate, sobald ein Buch mehrere
>>>>>> Autoren hat, was augenscheinlich am join liegt. Hat jemand ne Idee,
>>>>>> wie man das verhindern kann?
>>>>>>
>>>>>> Grüße, Tobi
>>>
>>> pack mal ein :group => "books.id" mit in den Scope.
>>>
>>> Viele Grüße
>>> Tim
>>>
>>> Am 09.03.2010 um 14:27 schrieb Tobias Weiß:
>>>
>>>> Hallo zusammen,
>>>>
>>>> @Daniel: Ich arbeite mit PostgreSQL und das mit dem DISTINCT habe ich
>>>> auch schon probiert. Wenn ich das so realisiere:
>>>>
>>>> named_scope :legal, lambda { |*args|
>>>>  { :select => "DISTINCT books.*,authors.*",
>>>> :joins => :authors,
>>>> :order => ["LOWER(" + sort  + ") " + order.upcase]}
>>>> }
>>>>
>>>> und nach dem Namen des Autors sortieren will, meckert die Datenbank,
>>>> dass sie das entsprechende Attribut nicht finden kann.
>>>>
>>>> @Rainer:
>>>>>
>>>>> Ich verstehe dein Problem nicht ganz.
>>>>> Du möchtest nach Author sortieren, aber trotzdem Bücher mit mehreren
>>>>> Autoren nur einmal anzeigen!?
>>>>
>>>> Genau so soll es sein. Ein Eintrag in meiner Liste sieht dann so aus
>>>> (alle Autoren sind gleichwertig):
>>>> 1. Autor1, Autor2, Autor3 | Titel1
>>>> 2. Autor1 | Titel2
>>>> 3. Autor2, Autor3 | Titel3
>>>>
>>>> Man könnte auch eine habtm-Relation anlegen, da hast Du recht. So habe
>>>> ich etwas Redundanz in der DB, aber das ist nicht weiter dramatisch.
>>>>
>>>> Mit include statt joins funktioniert das ganze, ich muss allerdings
>>>> "explizit" den Namen der Autoren-Tabelle anhängen, wenn ich nach einem
>>>> Attribut aus dieser Tabelle sortieren will:
>>>>
>>>> named_scope :sorted, lambda {|sort,order|
>>>>  sort = "authors." + sort if sort.downcase.eql?("last_name")
>>>>  {
>>>>  :include => :authors,
>>>>  :order => sort + " " + order.upcase
>>>>  }
>>>> }
>>>>
>>>>> Bei welchem der Autoren soll es denn dann in der Sortierung angezeigt
>>>>> werden!? Du musst schon einen eindeutigen Autoren definiert haben,
>>>>> damit
>>>>> das funktioniert.
>>>>> Du musst mit mehreren Autoren eh eine habtm-Relation haben, da
>>>>> Autoren
>>>>> im Normalfall mehr als ein Buch schreiben. In dem Falle würde ich
>>>>> keine
>>>>> Join-Tabelle verwenden sondern eine JoinClass mit boolean
>>>>> main_author.
>>>>> So ganz logisch klingt deine Anfrage nicht.
>>>>>
>>>>> Generelll könntest du dir einfach überlegen nach deinen NamedScopes
>>>>> einfach ein .uniq anzuhängen, damit kannst du doppelte Einträge
>>>>> ausfiltern.
>>>>
>>>> Das .uniq nach dem NamedScope werde ich mal testen.
>>>>
>>>> Danke für die Hilfe,
>>>> Tobias
>>>>
>>>>
>>>>>
>>>>> Gruesse, Rainer
>>>>>
>>>>> On Mon, Mar 08, 2010 at 08:39:03PM +0100, Tobias Weiß wrote:
>>>>>>
>>>>>> Hallo zusammen,
>>>>>>
>>>>>> ich stehe gerade etwas auf dem Schlauch, vielleicht kann mir jemand
>>>>>> weiterhelfen:
>>>>>>
>>>>>> Ich habe zwei Models:
>>>>>>
>>>>>> Author.rb
>>>>>>
>>>>>> Book.rb
>>>>>>  has_many :authors
>>>>>>
>>>>>> In book.rb habe ich einen named_scope, um die gefundenen Bücher nach
>>>>>> einem bestimmten Parameter zu sortieren. (Später wird der noch mit
>>>>>> anderen Scopes zu einer Filterkette verknüpft)
>>>>>>
>>>>>> named_scope :sorted, lambda {|sort,order| {
>>>>>>   :joins => :authors,
>>>>>>   :order => ["LOWER(" + sort  + ") " + order.upcase]}
>>>>>> }
>>>>>>
>>>>>> Mein Problem:
>>>>>> Ich möchte eine Liste mit allen Büchern haben, aber jedes Buch soll
>>>>>> nur einmal in der Liste erscheinen, egal wieviel Autoren es hat.
>>>>>> Book.sorted liefert mir jedoch Duplikate, sobald ein Buch mehrere
>>>>>> Autoren hat, was augenscheinlich am join liegt. Hat jemand ne Idee,
>>>>>> wie man das verhindern kann?
>>>>>>
>>>>>> Grüße, Tobi
>>>>>> _______________________________________________
>>>>>> rubyonrails-ug mailing list
>>>>>> rubyonrails-ug@headflash.com
>>>>>> http://mailman.headflash.com/listinfo/rubyonrails-ug
>>>>>
>>>>> _______________________________________________
>>>>> rubyonrails-ug mailing list
>>>>> rubyonrails-ug@headflash.com
>>>>> http://mailman.headflash.com/listinfo/rubyonrails-ug
>>>>>
>>>> _______________________________________________
>>>> rubyonrails-ug mailing list
>>>> rubyonrails-ug@headflash.com
>>>> http://mailman.headflash.com/listinfo/rubyonrails-ug
>>>
>>>
>> _______________________________________________
>> rubyonrails-ug mailing list
>> rubyonrails-ug@headflash.com
>> http://mailman.headflash.com/listinfo/rubyonrails-ug
>
> _______________________________________________
> rubyonrails-ug mailing list
> rubyonrails-ug@headflash.com
> http://mailman.headflash.com/listinfo/rubyonrails-ug
>



-- 
mfg marco
_______________________________________________
rubyonrails-ug mailing list
rubyonrails-ug@headflash.com
http://mailman.headflash.com/listinfo/rubyonrails-ug

Antwort per Email an