PostgreSQL
 sql >> база данни >  >> RDS >> PostgreSQL

Как да намерите публикации, маркирани с повече от един етикет в Rails и Postgresql

Може да искате да прегледате възможните начини за писане на този вид заявка в този отговор за прилагане на условия към множество редове в присъединяване . Ето една възможна опция за внедряване на вашата заявка в Rails с помощта на 1B, подходът на подзаявката...

Дефинирайте заявка в PostTag модел, който ще грабне Post ID стойности за даден Tag име:

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

Дефинирайте заявка в Post модел, който ще грабне Post записи за даден Tag име, използвайки структура на подзаявка:

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

След това можете да използвате заявка като тази:

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


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Време за изпълнение на заявката на Postgres

  2. Най-добри практики за сигурност на PostgreSQL

  3. Как да взема подзаявка DISTINCT ON, която е подредена в отделна колона, и да я направя бърза?

  4. PostgreSQL:Универсалният INSERT

  5. Подобряване на скоростта на заявка:прост SELECT в голяма таблица Postgres