2016-05-23 9 views
1

Bei einer Tabelle games und Spalte identifiers, deren Typ HSTORE:finden Schlüsselwertpaar in PostgreSQLs HSTORE

| id | name    | identifiers      | 
|----|------------------|------------------------------------| 
| 1 | Metal Gear  | { sku: 109127072, ean: 512312342 } | 
| 2 | Theme Hospital | { sku: 399348341 }     | 
| 3 | Final Fantasy | { ean: 109127072, upc: 999284928 } | 
| 4 | Age of Mythology | { tbp: 'a998fa31'}     | 
| 5 | Starcraft II  | { sku: 892937742, upc: 002399488 } | 

Wie kann ich feststellen, ob ein gegebener Satz von Schlüssel-Wert-Paare mindestens ein Spiel in der hat Datenbank?

Zum Beispiel, wenn ich dieses Array liefern: [ {sku: 109127072 }, { upc: 999284928 } ], sollte ich sehen:

| id | name   | identifiers      | 
|----|----------------|------------------------------------| 
| 1 | Metal Gear  | { sku: 109127072, ean: 512312342 } | 
| 3 | Final Fantasy | { ean: 109127072, upc: 999284928 } | 

Antwort

0

Für Schienen 5 Sie denken, versuchen sollte or Operator wie verwenden:

h = { sku: 109127072, upc: 999284928 } 
rela = Person.where("identifiers -> ? = ?", h.keys.first, h[h.keys.first]) 
h.keys[1..-1].reduce(rela) {|rela, key| rela.or("identifiers -> ? = ?", key, h[key]) } 
# => relation with ored-arguments 

für nicht 5 Schienen, die Sie verwenden, sind wie beschrieben here.

+0

Danke. Die Abfrage, nach der ich suche, geht davon aus, dass ich die Schlüssel der Spalte 'identifiers' nicht kenne. Ich kann keine OR-Bedingung für jede einzelne Kennung schreiben, die der Benutzer hinzufügen könnte. –

+0

@WilsonSilva aktualisiert Post –

Verwandte Themen