Ich habe zwei Modelle: Item
und Tag
. Beide haben ein Namensattribut. Ich möchte Elemente finden, die mit mehreren Tags versehen sind.
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.
Sie können dies lösen, indem Sie die Ergebnisse gruppieren und die Anzahl überprüfen:
%Vor%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.
Tags und Links sql ruby-on-rails activerecord