Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » Mysql »

Una consulta

Estas en el tema de Una consulta en el foro de Mysql en Foros del Web. Recién estoy empezando con este tema y no se si esto va acá o en otro lado... La cuestión es que para practicar un poco ...
  #1 (permalink)  
Antiguo 14/05/2012, 22:49
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 11 años, 11 meses
Puntos: 0
Una consulta

Recién estoy empezando con este tema y no se si esto va acá o en otro lado...
La cuestión es que para practicar un poco me propuse hacer un horario de colectivos...

Cree una tabla parecida a esta:

VIAJES
-Id
-NumeroViaje (hay distintos viajes)
-Ciudad (nombre de la ciudad)
-Horario (el horario por el que pasa el colectivo por esa ciudad)

Hice un formulario donde se puede elegir el origen y el destino, y lo que necesito saber es si se puede hacer una "doble consulta" a la misma tabla... para de esta manera me devuelva el Origen con su horario, y el destino con el suyo... teniendo en cuenta que el NumeroViaje del destino y del origen tiene que ser iguales.

Si alguien me puede ayudar... se lo agradezco...
Y disculpen si no logro expresar lo que necesito, pues hablo desde mi ignorancia...

Saludos
Giuliano
  #2 (permalink)  
Antiguo 15/05/2012, 07:01
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Una consulta

si mandas por tu formulario el nombre del destino y el origen seria

SELECT Ciudad, Horarios FROM VIAJES WHERE Ciudad = origen OR Ciudad = destino;

De esta forma va a encontrar primero una y luego otra, si estas arrancando con esto yo te recomendaria que desgloses mas las tablas y luego hagas relaciones x ejemplo yo haria.

viajes

idViaje
idOrigen
idDestino
horario

ciudades

idCiudad
nombre

en este caso lo primero que deberias hacer al enviar la informacion del origen y destino que desee el usuario seria cargarlo en la tabla viajes.

Código SQL:
Ver original
  1. INSERT INTO viajes (idOrigen,idDestino,horario) VALUES (variable que recibe el origen, variable que recibe el destino, variable que genera el horario);

Una vez que lo guardaste puedes hacer la consulta uniendo tablas de este modo.

Código SQL:
Ver original
  1. SELECT ciudades.nombre, viajes.horario
  2. FROM ciudades INNER JOIN viajes
  3. ON (ciudades.idCiudad = viajes.idDestino) AND (ciudades.idCiudad = viajes.idOrigen);

Si bien este tipo de consultas son complejas es el modo correcto de trabajar con datos al principio es un dolor de cabeza pero cuando te acostumbras vas a ver que es sencillo, si quieres para ayudarte puedes usar las mismas tablas que haces en mysql en access y prueba usando la herramienta que tiene para relacionar tablas, podes relacionarlas en vista de diseño y luego pedir el codigo SQL eso te puede ayudar mucho para empezar.

Saludos
  #3 (permalink)  
Antiguo 15/05/2012, 13:19
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Una consulta

Te comento mejor... yo tengo 3 tablas:

CIUDADES
-id
-ciudad

DIAS
-id
-idviaje
-Lunes (si/no)
-Martes (si/no)
-Miercoles (si/no)
-Jueves (si/no)
-Viernes (si/no)
-Sabado (si/no)
-Domingo (si/no)
-Feriado (si/no)

VIAJES
-id
-idciudad
-iddia
-horario

Y la consulta que hago es la siguiente...
Código SQL:
Ver original
  1. SELECT viajes.*, ciudades.*, dias.*
  2. FROM viajes, ciudades, dias
  3. WHERE viajes.idciudad = ciudades.id
  4. AND viajes.idciudad =".$_POST['origen']."
  5. AND viajes.iddias = dias.idviaje

Eso me devuelve el horario del origen, y yo quisiera hacer una tabla en php donde me aparezca de un lado el horario del origen, y del otro el horario del destino, y para eso tiene que coincidir el viajes.iddia de origen y destino...

Lo que se me ocurrió es hacer una tabla con un bucle que me cree todos los horarios del origen, y en la columna de al lado hice otra consulta:

Código SQL:
Ver original
  1. SELECT viajes.*, ciudades.*, dias.*
  2. FROM viajes, ciudades, dias
  3. WHERE viajes.idciudad = ciudades.id
  4. AND viajes.idciudad =".$_POST['destino']."
  5. AND viajes.iddias =".$row_viajes['iddias'];

Pero de esta manera me devuelve todos los origenes por mas que no llegue al destino estipulado...

Quizas estoy agrandando el problema... por eso quisiera que me ayuden a ver si tengo que borrar todo y hacerlo desde un principio, o si puedo seguir a partir de lo que ya tengo...

Saludos
Giuliano
  #4 (permalink)  
Antiguo 15/05/2012, 14:03
Avatar de fahs82  
Fecha de Ingreso: abril-2012
Ubicación: guadalajara
Mensajes: 139
Antigüedad: 12 años
Puntos: 12
Respuesta: Una consulta

segun tengo entendido se puede lograr con cross joins o consultas anidadas , te recomiendo veas la documentacion sobre el tema de mysql , por el momento no tengo cabeza para hacer un codigo de ejemplo por la carga de trabajo , en lo posible te posteo algo pero de menos ya tienes un hilo por donde comenzar salu2 y suerte
  #5 (permalink)  
Antiguo 16/05/2012, 02:28
 
Fecha de Ingreso: mayo-2012
Mensajes: 3
Antigüedad: 11 años, 11 meses
Puntos: 0
Respuesta: Una consulta

Estuve buscando, pero no encuentro nada... creo que lo que necesito es que en una misma consulta y con la misma tabla, me devuelva 2 cosas distintas (origen y destino), el problema es que los dos salen de la tabla viajes.horario y no se si se puede hacer...

hay alguna forma de que en una misma consulta me devuelva el viajes.horario del origen, y viajes.horario del destino, y poder renombrarlos (horaorigen, horadestino) para poder ponerlos en una tabla utilizando php? o estoy pidiendo demaciado...

Saludos y gracias por la ayuda que me están dando :)
  #6 (permalink)  
Antiguo 16/05/2012, 11:04
Avatar de djaevi  
Fecha de Ingreso: marzo-2007
Ubicación: Moreno, Buenos Aires
Mensajes: 400
Antigüedad: 17 años, 1 mes
Puntos: 47
Respuesta: Una consulta

Código SQL:
Ver original
  1. SELECT
  2. (SELECT viajes.horario FROM VIAJES WHERE idViaje = $_POST["origen"]) AS horaorigen,
  3. (SELECT viajes.horario FROM VIAJES WHERE idViaje = $_POST["destino"]) AS horadestino;

Algo asi? esto te devolveria en una fila el horario del viaje de origen y el horario del horario de destino, prueba y me comentas.

Etiquetas: tabla
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 09:26.