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

Вземете всички публикации, които имат конкретен етикет, и запазете всички други тагове в резултатите с SQL

Предполагам, че сте щастливи да изпратите две заявки към базата данни.

Първо вземете всички публикации за даден етикет:

SELECT * FROM blog_posts bp 
WHERE EXISTS (SELECT * FROM blog_tags bt INNER JOIN
               tags t ON t.id = bt.tag_id
              WHERE bp.id = bt.post_id
               AND t.tag = @SearchTag)

Второ, искате етикети, предполагам, свързани с този, който търсите чрез публикации:

SELECT * FROM tags t
WHERE EXISTS ( -- Here we link two tags via blog_tags
               SELECT * FROM blog_tags bt1 INNER JOIN
               blog_tags bt2 ON bt1.post_id = bt2.post_id
                     AND bt1.tag_id != bt2.tag_id INNER JOIN
               tags t ON t.id = bt1.tag_id
               WHERE t.tag = @SearchTag
                  AND t.id = bt2.tag_id
)


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

  2. Някакви предложения за db схема за съхранение на свързани ключови думи?

  3. SQL:преобразувайте редове в колони в MySQL (операция SELECT)

  4. Как да нулирам динамично конфигурацията на базата данни в Laravel?

  5. Преброяване на редове от подзаявка