sql >> Databasteknik >  >> RDS >> PostgreSQL

Hur man hittar inlägg taggade med mer än en tagg i Rails och Postgresql

Du kanske vill granska de möjliga sätten att skriva den här typen av frågor i det här svaret för att tillämpa villkor på flera rader i en join . Här är ett möjligt alternativ för att implementera din fråga i Rails med hjälp av 1B, sub-query-metoden...

Definiera en fråga i PostTag modell som tar tag i Post ID-värden för en given Tag namn:

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

Definiera en fråga i Post modell som tar tag i Post poster för en given Tag namn, med hjälp av en underfrågestruktur:

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

Då kan du använda en fråga som denna:

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


  1. SQL:Välj den sista posten för varje dag given datetime

  2. MySQL MAX() funktion för att jämföra numeriska värden i en uppdatering?

  3. Oracle SQL Where-klausul för att hitta datumposter äldre än 30 dagar

  4. mysql till csv utan att använda INTO OUTFILE av mysql