rails: Erhalte alle mit x und y UND z

8

Ich habe zwei Modelle: Item und Tag . Beide haben ein Namensattribut. Ich möchte Elemente finden, die mit mehreren Tags versehen sind.

%Vor%

Wenn ich eine Liste von Tag-IDs anführe, kann ich leicht die Liste der Elemente erhalten, die mit einem Tag oder mit dem anderen getaggt sind:

%Vor%

Wenn tag_ids {1,4} ist, dann werden alle Bilder mit 1, 4 oder beiden markiert.

Ich möchte jetzt wissen, wie man die mit beiden markierten Bilder erhält - 1 AND 4.

Ich kann mir nicht einmal das SQL vorstellen, das hier benötigt wird.

    
kikito 15.06.2010, 14:39
quelle

3 Antworten

13

Sie können dies lösen, indem Sie die Ergebnisse gruppieren und die Anzahl überprüfen:

%Vor%     
elektronaut 15.06.2010, 15:15
quelle
3

Kleines Update: Heute können wir (inspiriert von elektrononaut) verwenden:

%Vor%

Es ist nicht sehr anders, indem es hier gut funktioniert.

    
Arthur 17.10.2014 09:17
quelle
2

Ich habe eine Sache, die zu der ansonsten wundervollen Antwort von elektronaut hinzugefügt werden kann: Es wird nicht auf PostgreSQL funktionieren.

In meinem realen Beispiel enthält der Call Item.all andere Tabellen; So sieht die Auswahl folgendermaßen aus:

%Vor%

PostgreSQLs GROUP BY erfordert, dass alle Felder , die für eine Auswahl verwendet werden, dort enthalten sein müssen. Also musste ich alle Felder, die bei der vorherigen Auswahl verwendet wurden, in die GROUP BY-Klausel einfügen.

Und trotzdem hat es nicht funktioniert; Ich bin mir nicht sicher warum.

Ich habe eine einfachere, hässlichere Sache gemacht. Es erfordert zwei Datenbankanforderungen. Einer von ihnen wird verwendet, um IDs zurückzugeben, die als Bedingung verwendet werden.

%Vor%

Dann kann ich das tun:

%Vor%

Hacky, aber es funktioniert, und das Hacky ist lokalisiert.

    
kikito 18.06.2010 09:15
quelle

Tags und Links