2010-08-29 21 views
14

Estaba mirando a mi alrededor y me preguntaba cómo iba a hacer una publicación relacionada o similar para mostrar en mi sitio web usando PHP & MySQL? ¿Cuál es un ejemplo básico de cómo hacer esto?Creación de publicaciones relacionadas o similares usando PHP y MySQL

+0

Es necesario ser más específico. ¿Qué tipo de datos tienes y cómo defines una "publicación similar"? – casablanca

+0

@casablanca ¿Tengo etiquetas, categorías y publicaciones con títulos y contenido corporal si eso es lo que estás tratando? – leftout

Respuesta

27

Usando la búsqueda de texto completo de MySQL MATCH (col1,col2,...) AGAINST (expr [search_modifier]) cosa.

Digamos que su tabla es articles y necesita encontrar publicaciones relacionadas sobre un título de publicación actual. Hágalo así:

SELECT *, MATCH(title, body) AGAINST('$CurrentPostTitle') AS score 
FROM articles 
WHERE MATCH(title, body) AGAINST('$CurrentPostTitle') 
ORDER BY score DESC LIMIT 5 

Esto le dará las 5 mejores publicaciones relacionadas.

Pero primero recuerde permitido búsqueda de texto completo para las columnas de esa tabla, mediante la ejecución de esta consulta:

ALTER TABLE articles ADD FULLTEXT (title, body); 

[EDIT]: ¿Por qué no usar LIKE: Aclaración a OP:

Porque no dará resultados correctos. Digamos que tu título actual es "Música de 1980" y quieres publicaciones relacionadas sobre eso. Ahora, si usa LIKE, solo aparecerán las publicaciones que contengan EXACTAMENTE la secuencia de palabras "Música de 1980". Sin embargo, si usa MATCH ... AGAINST, aparecerán las publicaciones que contienen Música OR 1980. Además, las publicaciones que contienen tanto Música como 1980 aparecerán en la parte superior porque dan un SCORE a cada resultado y estamos ordenando por ese puntaje. Espero que eso esté claro.

[EDIT]: 2:

Si tiene categorías, puede agregar AND Category = '$CurrentCategory' en la consulta SQL where clause para obtener resultados más específicos.

[EDIT]: 3: OP no se puede utilizar el texto completo:

Si no puede utilizar texto completo (por alguna razón), sólo puede mostrar 5 mensajes al azar de la misma categoría. Ya que están en una misma categoría, que están relacionados de alguna manera al menos:

SELECT * 
FROM articles 
WHERE Category = '$CurrentCategory' 
LIMIT 5 

Editado Sintaxis: Se ha cambiado LIMTI a LIMIT en MySQL Code

+0

¿Puedo usar LIKE en lugar de FULLTEXT? – leftout

+0

@leftout, he actualizado la respuesta. – shamittomar

+0

Pero, ¿qué pasa si no puedo usar la búsqueda FULLTEXT, lo siento por toda la pregunta? – leftout

Cuestiones relacionadas