Usar varias funciones string en una consulta.

Iniciado por Hekaly, 9 Febrero 2013, 11:48 AM

0 Miembros y 1 Visitante están viendo este tema.

Hekaly

Hola a todos.

Estoy trabajando en un sistema de votos en una web de videojuegos y mi objetivo es poner en el perfil de cada usuario registrado los 10 ultimos juegos votados.

Tengo dos tablas en los que almaceno contenido, pero la que me interesa es la siguiente, muestro un ejemplo de como esta.



Esta es la forma simple de la tabla, en ella almaceno en id_juego el numero de ficha de un juego y en usuarios_votos por cada usuario el id usuario seguido del tiempo unix, cada usuario se separa por ; los otros dos campos son el nombre del juego y la caratula.

La consulta a esta tabla simple es la siguiente.

Código (sql) [Seleccionar]
SELECT id_juego,usuarios_votos,nombreJuego,caratula FROM ratings_usuarios, juegos WHERE juegos.idJuego = ratings_usuarios.id_juego AND ratings_usuarios.usuarios_votos REGEXP "2-" ORDER BY usuarios_votos;

Donde "2" es una variable que generare en php.

Bien mi objetivo es sacar los 10 ultimos, eso lo gago con LIMIT 10, y ordenadarlos por tiempo unix seria ORDER BY campo DESC.

El problema viene que en los registros a lo mejor no empieza por el nombre de usuario como en el registro 37 (56-1360403038;2-1360403176;)

Mi idea es sacar el id del juego y unicamente "user-tiempounix" osea el registro 37 seria (2-1360403176;)

Para eso nesesito saber donde empieza en la cadena el usuario-tiempounix y despues extraer solo esa parte.

Por separado se hacerlo.

Para saber en que numero de letra empieza lo hago asi.

Código (sql) [Seleccionar]
SELECT id_juego,LOCATE( '2-', ratings_usuarios.usuarios_votos ) , nombreJuego,caratula FROM ratings_usuarios, juegos WHERE juegos.idJuego=ratings_usuarios.id_juego AND ratings_usuarios.usuarios_votos REGEXP "2-" ORDER BY usuarios_votos;

Siguiente el ejemplo anterior todos empiezan en posicion 1 menos la ultima que es la posicion 15

Por otra parte para extraer el tiempo unix seguido de "usuario-" lo hago asi.

Código (sql) [Seleccionar]
SELECT id_juego,SUBSTRING_INDEX(usuarios_votos, ';', 1),nombreJuego,caratula FROM ratings_usuarios,juegos WHERE juegos.idJuego=ratings_usuarios.id_juego AND ratings_usuarios.usuarios_votos REGEXP "2-" ORDER BY usuarios_votos;


Pero en el registro sale "56-1360403038" ya que coge solo el numero 1 (SUBSTRING_INDEX(usuarios_votos, ';', 1))

Mi pregunta es, como puedo unir todo esto es una unica consulta???, deberia hacer una funcion o se puede hacer en un select???, estaria muy agradecido si me pudierais ayudar, muchas gracias y un saludo.

Carloswaldo

En mi opinión te estás complicando mucho sin razón cuando lo que deberías hacer es tener una tabla aparte para votos que relacione el id del usuario con el id del juego así te evitarías tener que hacer operaciones innecesarias con strings y las consultas serían más fáciles de hacer.