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

Error en consulta de MySQL

Estas en el tema de Error en consulta de MySQL en el foro de Mysql en Foros del Web. Tengo una consulta, pero solo me da 5 registros, navegando sobre la tabla son mas. Por favor apoyenme con esto, ya que soy novato. Gracias ...
  #1 (permalink)  
Antiguo 21/11/2012, 01:42
Avatar de ecruz_0708  
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Información Error en consulta de MySQL

Tengo una consulta, pero solo me da 5 registros, navegando sobre la tabla son mas. Por favor apoyenme con esto, ya que soy novato. Gracias de antemano.

select REMISIONES.idhabitacion as HAB, clientes.nombrecomercial as Cliente, REMISIONES.idfoliohuespedes as Folio, movtoshotel.precio as Importe, cuentascontables.descripcion as FormaPago, usuarios.login as usuario, REMISIONES.CIERRE as FechaHora from REMISIONES , movtoshotel, clientes, cuentascontables, usuarios where REMISIONES.CIERRE >= "2012-11-10 00:00:00" and REMISIONES.CIERRE <= "2012-11-12 06:00:00" and REMISIONES.idfoliohuespedes = movtoshotel.idfoliohuespedes and (MOVTOSHOTEL.IDCUENTACONTABLE =”MC” OR MOVTOSHOTEL.IDCUENTACONTABLE=”EFE” OR MOVTOSHOTEL.IDCUENTACONTABLE=”VI”) AND movtoshotel.idcuentacontable=cuentascontables.idcu entacontable and REMISIONES.idCLIENTE=CLIENTEs.idCLIENTE AND usuarios.idusuario=movtoshotel.idusuario INTO OUTFILE "/tmp/clie.csv" fields terminated by "," optionally enclosed by '\"' lines terminated by '\n';

Última edición por ecruz_0708; 21/11/2012 a las 01:50
  #2 (permalink)  
Antiguo 21/11/2012, 01:51
Avatar de ecruz_0708  
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error en consulta de MySQL

Tratare de explicar mejor:

Esta consulta es para generar los registros de clientes que ya salieron (la tabla REMISIONES). Pero necesito traer otros datos de mas tablas, como por ejemplo: movtoshotel, cuentascontables,usuarios, clientes.
  #3 (permalink)  
Antiguo 21/11/2012, 03:14
Avatar de Heimish2000  
Fecha de Ingreso: enero-2011
Ubicación: Madrid
Mensajes: 844
Antigüedad: 13 años, 3 meses
Puntos: 89
Respuesta: Error en consulta de MySQL

Lo primero: Tabula bien la consulta para que sea legible, así no hay quien se entere
Lo segurndo: Utiliza INNER JOIN para juntar las tablas
Lo tercero: Vete quitando condiciones a ver cual es la que no se cumple
Lo cuarto: Si después de quitar las condiciones no sabes por qué no se cumple pon aquí un ejemplo con datos que no salen que deberían salir (o con datos que salen que no deberían salir)
  #4 (permalink)  
Antiguo 21/11/2012, 09:17
Avatar de ecruz_0708  
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error en consulta de MySQL

aqui esta la consulta con inner join pero igual me sale solo 5 registros, por favor ayudenme

Código MySQL:
Ver original
  1. select REMISIONES.idhabitacion as HAB, clientes.nombrecomercial as Cliente, REMISIONES.idfoliohuespedes as Folio,
  2. movtoshotel.precio as Importe, cuentascontables.descripcion as FormaPago, usuarios.login as usuario, REMISIONES.CIERRE as FechaHora
  3.     REMISIONES  
  4.     inner join movtoshotel on movtoshotel.idfoliohuespedes=remisiones.idfoliohuespedes  
  5.     inner join clientes on remisiones.idcliente=clientes.idcliente
  6.     inner join usuarios on usuarios.idusuario=movtoshotel.idusuario  
  7.     inner join cuentascontables on movtoshotel.idcuentacontable=cuentascontables.idcuentacontable
  8. and (REMISIONES.CIERRE >= "2012-11-10 00:00:00" and REMISIONES.CIERRE <= "2012-11-12 06:00:00") and (MOVTOSHOTEL.IDCUENTACONTABLE ='MC' OR MOVTOSHOTEL.IDCUENTACONTABLE='EFE'  OR MOVTOSHOTEL.IDCUENTACONTABLE='VI')

Última edición por gnzsoloyo; 21/11/2012 a las 09:28 Razón: SQL sin etiquetar. Ilegible.
  #5 (permalink)  
Antiguo 21/11/2012, 09:35
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en consulta de MySQL

1) Usa alias, pero sin el AS. No se necesita y resulta confuso para leer.
2) Las condiciones que no componen la relación, van en el WHERE.
3) Las cadenas de texto van entre apóstrofos('), no con comillas(").
4) Usa IN() cuando tengas una lista de valores a comparar con OR sobre el mismo campo.
5) Estructura las consultas correctamente para poder entenderlas.
6) Etiqueta los códigos con lo que aparece en el combo de "Highlight", para poder ver mejor todo. Algunos errores de sintaxis se vuelven visibles cuando lo haces.

Código MySQL:
Ver original
  1.     R.idhabitacion HAB,
  2.     C.nombrecomercial Cliente,
  3.     R.idfoliohuespedes Folio,
  4.     MO.precio Importe,
  5.     CC.descripcion FormaPago,
  6.     U.login usuario,
  7.     R.CIERRE FechaHora
  8.     REMISIONES  R
  9.     INNER JOIN movtoshotel MO on R.idfoliohuespedes = MO.idfoliohuespedes  
  10.     INNER JOIN clientes C on C.idcliente = R.idcliente
  11.     INNER JOIN usuarios U on MO.idusuario = U.idusuario  
  12.     INNER JOIN cuentascontables CC on MO.idcuentacontable = CC.idcuentacontable
  13.     R.CIERRE BETWEEN '2012-11-10 00:00:00' AND '2012-11-12 06:00:00'
  14.     AND MO.IDCUENTACONTABLE IN ('MC', 'EFE', 'VI')
  15. INTO OUTFILE '/tmp/clie.csv'
  16.     FIELDS TERMINATED BY ','  
  17.     LINES TERMINATED BY '\n';
Prueba esto, sin el INTO OUTFILE, y dinos cuántos registros devuelve.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 21/11/2012, 11:09
Avatar de ecruz_0708  
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Pregunta Respuesta: Error en consulta de MySQL

Gracias por las recomendaciones, tratare de seguirlas al pie de la letra.

El resultado es el mismo (5 registros). Tratare de explicarlo mas a detalle:

En la tabla REMISIONES se encuentran lor registros de habitaciones que salieron del hotel, de ahi necesito rangos por fechas y que se hayan pagado en (EFE. MC o VI). Esto ultimo del pago lo saco de la tabla MOVTOSHOTEL que esta relacionada por el campo INFOLIOHUESPEDES.

Segun yo son mas registros, alguna consulta que me devuelva cuantos registros tiene REMISIONES de cierta fecha y con ciertas forma de pago? para comprobar que efectivamente son 5 unicamente los registros?.

Gracias de antemano
  #7 (permalink)  
Antiguo 21/11/2012, 11:37
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en consulta de MySQL

Los registros serán mas, pero sólo esos cinco (5) registros cumplen con todas las relaciones.
Lo que puede suceder es que haya uno o más registros que no salen, que no cumplen con todas las restricciones de los INNER JOIN o del WHERE.
Esos registros requerirían hacer consulta de otra forma.
haz lo siguiente: Quita las condiciones del CIERRE y vuelve a correrla. Si siguen siendo cinco registros, entonces el problema es que una o mas tablas es opcional y no obligatoria, y en ese caso hay que usar o LEFT JOIN o RIGHT JOIN.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 21/11/2012, 12:12
Avatar de ecruz_0708  
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Sonrisa Respuesta: Error en consulta de MySQL

Ya encontre el detalle, cuando el campo idcliente en la tabla remisiones esta vacio, no devuelve el registro.

Como hacerle para que cuando encuentre un registro con idcliente vacio me lo regrese.

Alguien que me oriente??
  #9 (permalink)  
Antiguo 21/11/2012, 12:45
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: Error en consulta de MySQL

Hay que cambiar la disposicion de las tablas, pero el problema es que Remisiones" es tabla base en tu consulta, por lo que si no tiene el ID del cliennte, todas las demás dependencias devolverán nulos. Sólo puedes recuperar la lista de clientes en ese contexto:

Código MySQL:
Ver original
  1.     C.nombrecomercial Cliente,
  2.     IFNULL(R.idhabitacion, '')  HAB,
  3.     IFNULL(R.idfoliohuespedes, '')  Folio,
  4.     IFNULL(MO.precio, '')  Importe,
  5.     IFNULL(CC.descripcion, '')  FormaPago,
  6.     IFNULL(U.login, '')  usuario,
  7.     IFNULL(R.CIERRE, '') FechaHora
  8.     INNER JOIN clientes C LEFT JOIN REMISIONES R ON C.idcliente = R.idcliente
  9.     INNER JOIN movtoshotel MO on R.idfoliohuespedes = MO.idfoliohuespedes  
  10.     INNER JOIN usuarios U on MO.idusuario = U.idusuario  
  11.     INNER JOIN cuentascontables CC on MO.idcuentacontable = CC.idcuentacontable
  12.     R.CIERRE BETWEEN '2012-11-10 00:00:00' AND '2012-11-12 06:00:00'
  13.     AND MO.IDCUENTACONTABLE IN ('MC', 'EFE', 'VI');
¿Se entiende el problema?
Puede que en realidad deban ponerse otras condiciones del WHERE, para que se devuelvan datos, pero tal y como está, con Remisiones en NULL, todas las otras tablas no devuelven datos.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #10 (permalink)  
Antiguo 21/11/2012, 13:26
Avatar de ecruz_0708  
Fecha de Ingreso: noviembre-2012
Mensajes: 6
Antigüedad: 11 años, 5 meses
Puntos: 0
Respuesta: Error en consulta de MySQL

Gracias de antemano por la respuesta, en si no importa mucho si ID.CLIENTE es null, lo que interesa es que ese registro de remisiones esta dentro de las condiciones de busqueda (fechas y forma de pago). Pero aplique un Left Join y me funcionó.

A continuación lo que hice, para que por favor me corrijas o me des el visto bueno.

Código MySQL:
Ver original
  1.  
  2.     R.idhabitacion HAB,
  3.  
  4.     C.nombrecomercial Cliente,
  5.  
  6.     R.idfoliohuespedes Folio,
  7.  
  8.     MO.precio Importe,
  9.  
  10.     CC.descripcion FormaPago,
  11.  
  12.     U.login usuario,
  13.  
  14.     R.CIERRE FechaHora
  15.  
  16.  
  17.     movtoshotel MO
  18.  
  19.     INNER JOIN REMISIONES  R using(idfoliohuespedes)
  20.  
  21.     left JOIN clientes C on C.idcliente = R.idcliente
  22.  
  23.     INNER JOIN usuarios U on MO.idusuario = U.idusuario  
  24.  
  25.     INNER JOIN cuentascontables CC on MO.idcuentacontable = CC.idcuentacontable
  26.  
  27.  
  28.     R.CIERRE BETWEEN '2012-11-11 00:00:01' AND '2012-11-11 23:59:59'
  29.  
  30.     AND MO.IDCUENTACONTABLE IN ('MC', 'EFE', 'VI')
  31.     AND MO.ESTATUS=1
  32.  
  33. INTO OUTFILE '/tmp/clie.csv'
  34.  
  35.     FIELDS TERMINATED BY ','  
  36.  
  37.  
  38.     LINES TERMINATED BY '\n';

Etiquetas: registros, select, 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 20:27.