2016-06-19 9 views
1

Ich versuche, die Abfrage für posts that have all of the given tags zu bekommen.Wie bekomme ich Beiträge, die sich auf einige Tags beziehen?

Ich habe die Abfrage für posts that have one of the given tags.

Die Abfrage ich habe, ist:

select * from `blog_posts` 
    inner join `blog_post_tag` on `blog_posts`.`id` = `blog_post_tag`.`post_id` 
    where `blog_post_tag`.`tag_id` in (?, ?) 
     and `blog_posts`.`deleted_at` is null 

Zum Beispiel:

| post_id | tag_id | 
|---------+--------| 
|  1 |  1 | 
|  1 |  2 | 
|  2 |  1 | 
|  3 |  2 | 
  • Für gegebene Tags [1], sollte das Ergebnis geben Sie mir die Beiträge mit den ids 1 und 2.

  • Für gegebene Tags [1, 2], sollte das Ergebnis geben Sie mir die Post mit dem id 1(nicht [1, 2, 3]).

+0

@jpw Danke, ich versuche ... :) –

+1

@jpw habe ich schon ... –

Antwort

1

ich in der Lage war, durch das erwartete Ergebnis zu erhalten:

select * from `blog_posts` 
    inner join `blog_post_tag` on `blog_posts`.`id` = `blog_post_tag`.`post_id` 
    where `blog_post_tag`.`tag_id` in (?, ?) 
     and `blog_posts`.`deleted_at` is null 
    group by `blog_post_tag`.`post_id` 
    having COUNT(DISTINCT `blog_post_tag`.`tag_id`) = 2 
Verwandte Themen