Hola 50l3r:
Hace algún tiempo otro forista comentaba algo muy similar a lo que estás planteando... el problema corresponde más buen a un error de diseño de tus tablas... no es correcto guardes TEXTOS como lo que haces, si no lo que tienes que hacer es guardar ACCIONES asociadas a los usuarios... es decir, en lugar de tener una tabla así:
Código MySQL:
Ver original+------+---------------------------------------------+
| id | comentario |
+------+---------------------------------------------+
| 1 | A @john le ha gustado #juego_de_tronos |
| 2 | A @john_ande le ha gustado #juego_de_tronos |
| 3 | @john a comentado algo |
| 4 | @john_ande a comentado algo |
| 5 | @leo es amigo de @john |
| 6 | @leo es amigo de @john_ande |
| 7 | @john |
| 8 | @john_ande |
+------+---------------------------------------------+
deberías tener un modelo con al menos tres tablas:
Código MySQL:
Ver originalusuarios
idUsuario|nombreUsuario
1|@john
2|@john_ande
Acciones
1|Me gusta
2|Comentario
3|otra
AccionesUsuario
idAccionUsuario|idAccion|idUsuario
1|1|1
2|1|2
3|2|1
4|2|2
5|3|1
6|3|2
De esta evitas el uso de consultas tipo LIKE, las cuales por cierto SON TERRIBLEMENTE INEFICIENTES, lo cual puede comprometer el rendimiento del servidor.
Ahora bien, esto es por el lado del modelo de BD, sin embargo, SI TE ES IMPOSIBLE CAMBIAR TU MODELO, entonces la consulta se vuelve un poco más compleja. De entrara, permitir que se pueda capturar CUALQUIER cosa en un campo tipo TEXTO, el usuario a buscar puede aparecer al menos en 4 formas distintas (como en la tabla que pongo de ejemplo), es decir sólo, al inicio de la frase, en medio de la frase o al final de la frase... suponiendo que el separador siempre sea el espacio en blanco, podrías hacer algo como esto:
Código MySQL:
Ver original+------+---------------------------------------------+
| id | comentario |
+------+---------------------------------------------+
| 1 | A @john le ha gustado #juego_de_tronos |
| 2 | A @john_ande le ha gustado #juego_de_tronos |
| 3 | @john a comentado algo |
| 4 | @john_ande a comentado algo |
| 5 | @leo es amigo de @john |
| 6 | @leo es amigo de @john_ande |
| 7 | @john |
| 8 | @john_ande |
+------+---------------------------------------------+
-> comentario
= '@john' OR -> comentario
LIKE '@john %' OR -> comentario
LIKE '% @john %' OR -> comentario
LIKE '% @john'; +------+----------------------------------------+
| id | comentario |
+------+----------------------------------------+
| 1 | A @john le ha gustado #juego_de_tronos |
| 3 | @john a comentado algo |
| 5 | @leo es amigo de @john |
| 7 | @john |
+------+----------------------------------------+
Lo cual es terrible
esto se complica aun más si el separador no es solo el espacio en blanco, y pudieras tener cosas como:
Código MySQL:
Ver original+------+---------------------------------------+
| id | comentario |
+------+---------------------------------------+
| 9 | A @john
, @john_ande
y @leo son amigos
| | 10 | A @john-@john_ande-@leo son amigos |
| 11 | A @john|@john_ande|@leo son amigos |
+------+---------------------------------------+
Es decir utilizar un separador distinto al espacio, o permitir valores multivariados...
Insisto, si puedes cambiar tu modelo de BD, HAZLO y evitate dolores de cabeza.
Saludos
Leo.