MySQL NO COMO consulta no funciona

Tengo 2 tablas:

  • puestos
  • etiquetas

Etiquetas de la tabla se estructura como esta:

  • post_id
  • etiqueta

Así, por cada etiqueta que se da para un post, puedo crear un registro en las etiquetas de la tabla. Si un post tiene 10 etiquetas, hay 10 registros en las etiquetas de la tabla con la que post_id.

Ahora estoy tratando de construir una página de búsqueda donde los usuarios pueden hacer una búsqueda de publicaciones donde las etiquetas no contienen el dado de las palabras clave. Esto crea un problema. Una consulta como:

SELECT DISTINCT posts.id, posts.title, posts.content
   FROM jobs, tags
   WHERE tags.tag NOT LIKE '%$keywords%' AND posts.id=tags.post_id

no funciona porque si un post tiene 6 etiquetas y uno de ellos tiene la palabra clave, es todavía será devuelto porque los otros 5 los registros en las etiquetas de la tabla no tiene esa palabra clave.

¿Cuál es la mejor manera de resolver esto? Cualquier otra forma de crear una nueva columna en los puestos de la tabla que almacena toda la separada por comas de los tags utilizados sólo para la búsqueda??

InformationsquelleAutor Click Upvote | 2009-02-01

1 Kommentar

  1. 7

    Asegúrese de que tiene los índices o esto va a realizar muy mal:

    SELECT posts.id, posts.title, posts.content
    FROM posts 
    WHERE NOT EXISTS (
      SELECT post_id from tags
      WHERE tags.tag LIKE '%$keywords%' 
        AND posts.id=tags.post_id
    )

    Esto se obtiene una lista de todos los mensajes, excepto aquellos que tienen una coincidencia de etiqueta la etiqueta especificada. (El original de la consulta hace referencia a una ‘trabajos’ de la tabla. Supuse que era una errata por ‘posts’.)

    Los alias de tabla hacer esto un poco más claro:

    SELECT p.id, p.title, p.content
    FROM posts p
    WHERE NOT EXISTS (
      SELECT t.post_id from tags t
      WHERE t.tag LIKE '%$keywords%' 
        AND p.id=t.post_id
    )

    A continuación, me gustaría crear estos índices:

    Posts: id, tag_id
    Tags: post_id, tag

    A continuación, ejecute la consulta con ‘explicar‘ para ver si está funcionando bien. Actualización de su pregunta con los resultados y alguien va a ofrecer más asesoramiento. Optimización de índices es más de ensayo y error que cualquier otra cosa así que la prueba es realmente necesario.

    • Yo estaba en el proceso de contabilización de eso… 🙁
    • Debo crear un índice en la columna etiqueta?
    • Un índice en la columna etiqueta de no ayudar a como está el texto de búsqueda de todos los registros. Usted necesita índices en su post_id columnas.
    • Me gustaría crear estos índices: Puestos{id, tag_id}; Etiquetas{post_id, etiqueta}. A continuación, ejecute la consulta con ‘explicar el plan’ para ver si está funcionando bien.

Kommentieren Sie den Artikel

Bitte geben Sie Ihren Kommentar ein!
Bitte geben Sie hier Ihren Namen ein

Recent Articles

Python «set» con duplicados/elementos repetidos

Hay una forma estándar de representar un "conjunto" que puede contener elementos duplicados. Como yo lo entiendo, un conjunto tiene exactamente un cero o...

Python: generador de expresión vs rendimiento

En Python, ¿hay alguna diferencia entre la creación de un generador de objetos a través de un generador de expresión versus el uso de...

Cómo exportar/importar la Masilla lista de sesiones?

Hay una manera de hacer esto? O tengo que tomar manualmente cada archivo de Registro? InformationsquelleAutor s.webbandit | 2012-10-23

no distingue mayúsculas de minúsculas coincidentes en xpath?

Por ejemplo, para el xml a continuación <CATALOG> <CD title="Empire Burlesque"/> <CD title="empire burlesque"/> <CD...