elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.


 


Tema destacado: ¿Eres nuevo? ¿Tienes dudas acerca del funcionamiento de la comunidad? Lee las Reglas Generales


+  Foro de elhacker.net
|-+  Programación
| |-+  Desarrollo Web
| | |-+  Bases de Datos (Moderador: Carloswaldo)
| | | |-+  Usar varias funciones string en una consulta.
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: [1] Ir Abajo Respuesta Imprimir
Autor Tema: Usar varias funciones string en una consulta.  (Leído 1,252 veces)
Hekaly

Desconectado Desconectado

Mensajes: 85



Ver Perfil WWW
Usar varias funciones string en una consulta.
« en: 9 Febrero 2013, 11:48 »

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
  1. 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
  1. 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
  1. 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;
  2.  

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.


En línea

Carloswaldo
Traductor
Moderador Global
***
Desconectado Desconectado

Mensajes: 4.741


Nos reservamos el derecho de ban.


Ver Perfil WWW
Re: Usar varias funciones string en una consulta.
« Respuesta #1 en: 10 Febrero 2013, 15:56 »

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.


En línea

Páginas: [1] Ir Arriba Respuesta Imprimir 

Ir a:  

Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines