sql >> Database teknologi >  >> RDS >> PostgreSQL

Sådan finder du indlæg tagget med mere end ét tag i Rails og Postgresql

Du vil måske gennemgå de mulige måder at skrive denne form for forespørgsel på i dette svar til at anvende betingelser på flere rækker i en join . Her er en mulig mulighed for at implementere din forespørgsel i Rails ved hjælp af 1B, sub-query-tilgangen...

Definer en forespørgsel i PostTag model, der vil fange Post ID-værdier for et givet Tag navn:

# PostTag.rb
def self.post_ids_for_tag(tag_name)
  joins(:tag).where(tags: { name: tag_name }).select(:post_id)
end

Definer en forespørgsel i Post model, der vil fange Post poster for et givet Tag navn ved hjælp af en underforespørgselsstruktur:

# Post.rb
def self.for_tag(tag_name)
  where("id IN (#{PostTag.post_ids_for_tag(tag_name).to_sql})")
end

Så kan du bruge en forespørgsel som denne:

Post.for_tag("basil").for_tag("tomato")


  1. sqlalchemy udfører ikke Kommentar til skema

  2. Plsql for at stave nummer (valuta) til italiensk valuta uden hardkodet oversættelsesnummer

  3. Fejl:uhashbar type:'dict'

  4. Selvhenvisende fremmednøgle i sequlize js