encontrar las publicaciones relacionadas por etiquetas con una publicación específica en mysql

StackOverflow https://stackoverflow.com/questions/1216099

  •  06-07-2019
  •  | 
  •  

Pregunta

Tengo estas tablas: Publicaciones (post_is, título y texto), Etiquetas (tag_id, etiqueta), Post_tag_nn (id, tag_id, post_id). Quiero una publicación específica que tenga, por ejemplo, 4 etiquetas todas las publicaciones con esas etiquetas, luego todas las publicaciones con tres de esas etiquetas, luego todas las publicaciones con dos de esas etiquetas y así sucesivamente. ¿Cómo puedo construir una consulta SQL para este propósito (en php parece un problema de retroceso = todos los subconjuntos de un conjunto dado).

¿Fue útil?

Solución

Haga una consulta para encontrar las etiquetas de la publicación actual, algo así como

SELECT tag_id
FROM Post_tag_nn
WHERE post_id = $post_id;

Luego, usando esos identificadores de etiqueta, esta consulta debería devolverle los identificadores de las publicaciones con 4,3,2, ... etiquetas coincidentes:

SELECT post_id, COUNT(post_id) AS tag_count
FROM Post_tag_nn
WHERE tag_id IN ($array_of_tag_ids)
GROUP BY post_id
ORDER BY tag_count DESC;

Otros consejos

Si va a desplegar cada publicación con una sola etiqueta, independientemente de lo que haga, es mejor que ejecute una sola consulta por etiqueta para extraer todas las publicaciones con esa etiqueta y luego generar el establece usted mismo.

Algo así como:

select t.id, t.tag_id, p.post_id, p.title, p.text
  from post_tag_nn as t, posts p
  where p.id = t.post_id
  order by t.id

Y luego haz el grupo en tu código. Por supuesto, podría hacer dos consultas diferentes, una donde calcule el orden y el recuento de sus etiquetas y luego una donde retire la publicación de cada etiqueta.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top