Ir al contenido


Foto

Consulta relacionando tablas


  • Por favor identifícate para responder
6 respuestas en este tema

#1 lagares66

lagares66

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 20 marzo 2012 - 02:55

Os comento un problema creo que tonto, pero llevo un par de semanas con esto y no consigo hacerlo bien.

Os muestro las tablas

Users                Res                  Car                Pol                      Mol                              Pal
id_user          id_res                  id_car          id_pol                    id_mol                      id_pal
nombre        nombre_ac      nombre_car    nombre_pol        Nombre_,mol              Nombre_Pal
Cod_res 
Cod_car
Cod_pol
Cod_Mol
cod_pal
ect..


Y realizo la consulta

Select * From nombre, res, pol....
where

WHERE users.usuario='$usuario'"; and
car.car_id=users.cod_car ......

Que hago mal ..... me tarda como unos 30 segundos en hacer la consulta


Y lo que quiero hacer es saber que servicios tiene contratado el cliente
Cod_ enlaza con el servicio


Si no me he explicado bien pregunte por que quiero sacarme esto de la cabeza ya jejjeej :cheesy: :cry:




  • 0

#2 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 20 marzo 2012 - 07:32


Select * From USERS 
JOIN CAR ON car_id = cod_car
WHERE users.usuario='$usuario'


Deberías utilizar algo así
  • 0

#3 Marc

Marc

    Advanced Member

  • Moderadores
  • PipPipPip
  • 1.484 mensajes
  • LocationMallorca

Escrito 20 marzo 2012 - 07:58

Además de recomendarte, como hace Nikolás, que utilices una sintaxis de JOINS para relacionar las tablas, también tienes que crear índices para que el motor de la base de datos pueda acelerar la ejecución de la consulta.

Los índices se tienen que definir para los campos del filtro de selección (un índice para el campo USUARIO en la tabla USERS) y para los campos de relación entre tablas (otro índice para el campo COD_CAR en la tabla USERS, ... ...)

Saludos.
  • 0

#4 lagares66

lagares66

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 20 marzo 2012 - 08:51

Marc

Un indice en la tabla usuario.users ??? y contra que celda y tabla,  no entiendo el porque?
Muchas gracias por contestar.

Y solo el join  puedo hacer esto?? bueno e visto que si se puedo pero es bueno hacerlo asi?

SELECT * FROM USERS, 
JOIN CAR ON car_id = cod_car and 
JOIN rest ON res_id = cod_res and 
WHERE users.usuario='$usuario'


Creo que no hace falta decir que soy nuevo en esto
  • 0

#5 lagares66

lagares66

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 20 marzo 2012 - 09:23

Funciona el código a la perfección muchas gracias por vuestra ayuda.

Peroooo jejje siempre hay un pero lo he relacionado como a 10 tablas y aun me falta alguna mas y ya se me a disparado la consulta a unos 12 segundos..

Hay solución para que la consulta vaya mas rápido. Más que la solución prefiero la explicación ya que me esta apasionando este mundo y prefiero aprender que a que me lo den mascadito.




  • 0

#6 Nikolas

Nikolas

    Advanced Member

  • Miembro Platino
  • PipPipPip
  • 604 mensajes
  • LocationMar del Plata / Bs As / Argentina

Escrito 20 marzo 2012 - 09:25

Marc

Un indice en la tabla usuario.users ??? y contra que celda y tabla,  no entiendo el porque?
Muchas gracias por contestar.

Y solo el join  puedo hacer esto?? bueno e visto que si se puedo pero es bueno hacerlo asi?

SELECT * FROM USERS,
JOIN CAR ON car_id = cod_car and 
JOIN rest ON res_id = cod_res and 
WHERE users.usuario='$usuario'

Creo que no hace falta decir que soy nuevo en esto


En realidad, todas las tablas deben tener "Indices" dado que el motor de la base de datos, busca por ellos. (Funciona como buscar en un libro, si una palabra comienza con "J" vas a la J y buscas desde alli. y no desde la A).

¿Como creas la base de datos y tablas?


  • 0

#7 lagares66

lagares66

    Member

  • Miembros
  • PipPip
  • 12 mensajes

Escrito 20 marzo 2012 - 09:39

OK lo reconozco que he liado un poco, si es cierto tiene indice.


  • 0




IP.Board spam blocked by CleanTalk.