sql >> Database >  >> RDS >> PostgreSQL

Hoe berichten te vinden die zijn getagd met meer dan één tag in Rails en Postgresql

Misschien wilt u de mogelijke manieren om dit soort zoekopdrachten te schrijven bekijken in dit antwoord voor het toepassen van voorwaarden op meerdere rijen in een join . Hier is een mogelijke optie voor het implementeren van uw zoekopdracht in Rails met behulp van 1B, de subquery-aanpak...

Definieer een zoekopdracht in de PostTag model dat de Post . zal pakken ID-waarden voor een gegeven Tag naam:

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

Definieer een zoekopdracht in de Post model dat de Post . zal pakken records voor een gegeven Tag naam, met behulp van een subquerystructuur:

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

Dan kun je een zoekopdracht als deze gebruiken:

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


  1. (1/1) MethodeNiet toegestaanHttpUitzondering

  2. DAYOFWEEK() Voorbeelden – MySQL

  3. SSIS-pakket uitvoeren als SQLAgent-taak

  4. Converteer tekenreeksen naar HOOFDLETTERS in SQL Server