Foros del Web » Programando para Internet » PHP »

consulta sin solucion..

Estas en el tema de consulta sin solucion.. en el foro de PHP en Foros del Web. ya he publicado mi problema por dos dias seguidos en este foro y no hay ninguna respuesta, no se si es que estoy explicando mal ...
  #1 (permalink)  
Antiguo 23/01/2012, 17:38
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
consulta sin solucion..

ya he publicado mi problema por dos dias seguidos en este foro y no hay ninguna respuesta, no se si es que estoy explicando mal mi duda, o que no se puede hacer lo que quiero, pero lo intento de nuevo.. tengo un sistema que me avisa la entradas y salidad de un documento (expediente) a cada oficina, en la bd tengo los campos estado(ingreso o egreso), fecha(fecha de ingreso o egreso), ID(unica autoincrementable), identificador(copia de la ID del ingreso que solo la tienen los egresos, la uso para saber a que ingreso corresponde cada egreso ya que por ingreso solo hay un egreso), casillero(representa el lugar fisico o casillero donde esta el documento guardado, este registro lo manejo desde otra bd llamada casilleros donde voy actualizando con un update los casillero ocupados y vacios por dia, los casilleros son comunes a todas las oficinas por lo tanto el casillero numero uno puede estar ocupado por cualquier oficina).

Hasta ahi todo bien, prepare un pequeño buscador que me decia cuantos ingresos y egresos tenia en el dia de la fecha, asique solo contaba los casilleros libres y ocupados y estaba todo solucionado, el problema se presento cuando me pidieron saber cuantos casilleros habia tenido libres y ocupados en otra fecha (elegida por el usuario en un buscador) como la fecha ya no era fija y los casilleros se actualizan por dia cambiado de ocupados a vacios, no tengo forma de seguir sacando esa informacion de la base de casilleros, por lo que me fui a la base de ingresos y egresos, ahi se me presento el problema.

Intento hacer una consulta a esa base de datos ingresando una fecha X, y la base de datos deberia responderme diciendo en ese dia cuanto casillero tenia ocupados y cuantos vacios, por lo que se me ocurrio leer todos los registros menores a la fecha fecha<$fecha y que sean egresos estado='egreso' una vez filtrados le pido que lea el identificadory lo guardo en la variable $identegreso, luego hago otra consulta le digo que esta vez dentro del bucle lea los ingresos menores a la fecha fecha<$fecha and estado='ingreso', pero que solo me traiga los que no correspoden a ningun egreso ID!='$identegreso'. de esa manera se cuantos ingresos tengo hasta esa fecha que no egresaron, por lo tanto se cuantos casilleros vacios tengo. el problema es que el bucle funciona perfecto cuando solo tengo un registro en la base de datos un ingreso con su correspondiente egreso, cuando tengo dos o mas no funciona por que el primer bucle busca el primer egreso toma su identificador y anula el ingreso que corresponde pero a su vez me muestra los otros, luego va por el segundo egreso pero me muestra el primero, osea.. comprueba de a uno por vez y en cada vuelta del bucle me muestra todos los que no comprobo por lo tanto veo los resultados como si no estuviera haciendo nada jajaaja. no encuentro una solucion logica para esto y esta consulta esta retrasando todo mi proyecto, si alguien puede ayudarme ya sea con codigo o con algo de logica se lo voy a agradecer mucho, por favor comenten porque no se si estoy escribiendo esto en el lugar correcto, desde ayer tengo mas de 100 visitas y ningun comentario en mis post anteriores y no se si se debe a que estoy escribiendo en un lugar que no debo(empece ayer en este foro y es mi primer pregunta). gracias a todos y cualquier comentario es bienvenido

pego el codigo que estoy usando actualmente:

Código PHP:
$resulta=mysql_query("select * from documentos Where estado='egreso'
 and  fecha<'$fecha'"
,$link);
while(
$uno=mysql_fetch_array($resulta)){
$identegreso=$uno['identificador'];


$resulta2=mysql_query("select * from documentos where estado!='egreso' and
  ID!='$identegreso' and fecha<'$fecha'"
,$link);
while(
$dos=mysql_fetch_array($resulta2)){
$identingreso=$dos['ID'];

echo 
$identingreso."<br />";
}



Última edición por alears; 23/01/2012 a las 17:45
  #2 (permalink)  
Antiguo 23/01/2012, 18:34
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

explicas mucho pero por alguna razón no se entiende bien tu problema, y tu código no tiene pies ni cabeza, no tiene caso hacer 2 consultas a la misma tabla, solo para obtener 2 veces el mismo resultado....

trata de explicar mejor el problema, el como debería funcionar y como esta funcionando
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #3 (permalink)  
Antiguo 23/01/2012, 18:48
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
explicas mucho pero por alguna razón no se entiende bien tu problema, y tu código no tiene pies ni cabeza, no tiene caso hacer 2 consultas a la misma tabla, solo para obtener 2 veces el mismo resultado....

trata de explicar mejor el problema, el como debería funcionar y como esta funcionando
ok intentare resumirlo, desde un buscador yo selecciono una fecha, la busqueda deberia devolver como resultado todos los documentos ingresados antes de esa fecha y que no se les dio salida antes de esa fecha.

*digamos ingreso el documento Nº1 y Nº2 con fecha 23/09
*el mismo dia 23/09 le doy salida al documento Nº1
* el dia 25/09 le doy salida al documento Nº2
*en el buscador pongo como fecha de busqueda 24/09
*el resultado deberia ser documento Nº2 ya que al Nº1 se le dio salida antes de esa fecha.

avisame si quedo mas claro, me cuesta tanto explicarlo como hacerlo jejeje
  #4 (permalink)  
Antiguo 23/01/2012, 18:54
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: consulta sin solucion..

Cuando dice, "le doy salida", supongo que queda con un estado cierto???(estado=salida)
entonces tiene que hacer un filtro por fecha y por estado
Código SQL:
Ver original
  1. SELECT * FROM documentos WHERE estado='salida' AND  fecha<'2012-01-23'
No se si me equivoque.
Ah, no lei todo lo que escribió, es muy largo :S
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #5 (permalink)  
Antiguo 23/01/2012, 19:02
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

Cita:
Iniciado por alears Ver Mensaje
ok intentare resumirlo, desde un buscador yo selecciono una fecha, la busqueda deberia devolver como resultado todos los documentos ingresados antes de esa fecha y que no se les dio salida antes de esa fecha.

*digamos ingreso el documento Nº1 y Nº2 con fecha 23/09
*el mismo dia 23/09 le doy salida al documento Nº1
* el dia 25/09 le doy salida al documento Nº2
*en el buscador pongo como fecha de busqueda 24/09
*el resultado deberia ser documento Nº2 ya que al Nº1 se le dio salida antes de esa fecha.

avisame si quedo mas claro, me cuesta tanto explicarlo como hacerlo jejeje
Según la lógica que manejas, debería funcionarte la sentencia SQL que tienes, si no es así que es lo que arroja dicha sentencia, ahora otra cosa, que tipo es el campo "fecha" porque estamos suponiendo que es un campo date o de perdida un datetime
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #6 (permalink)  
Antiguo 23/01/2012, 19:03
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por malakian Ver Mensaje
Cuando dice, "le doy salida", supongo que queda con un estado cierto???(estado=salida)
entonces tiene que hacer un filtro por fecha y por estado
Código SQL:
Ver original
  1. SELECT * FROM documentos WHERE estado='salida' AND  fecha<'2012-01-23'
No se si me equivoque.
Ah, no lei todo lo que escribió, es muy largo :S
ajjaja si se me va la mano escribiendo a veces, el estado si es egreso o salida es lo mismo, como dices, el tema es que haciendo esa consulta me trae las salidas y lo que yo necesito es que me traiga las entradas que no tuvieron salida antes de esa fecha, digamos los documentos que para esa fecha estaban ingresados pero nadie les dio salida. y a los que si se les dio salida que no los muestre, esos no me interesan.


llevandolo a otro plano seria como decir, que necesito saber cuantas personas de las que subieron al autobus no se bajaron del mismo, poniendo como filtro las paradas que el autobus hizo.

ya no se me ocurre como mas explicarlo jajaja cada ves se me hace mas lio
  #7 (permalink)  
Antiguo 23/01/2012, 19:05
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
Según la lógica que manejas, debería funcionarte la sentencia SQL que tienes, si no es así que es lo que arroja dicha sentencia, ahora otra cosa, que tipo es el campo "fecha" porque estamos suponiendo que es un campo date o de perdida un datetime
el problema es que al estad dentro del bucle en el ejemplo que te di, busca el documento Nº1 y encuentra que salio, entronces no lo muestra, pero me muestra el Nº2, hasta ahi correcto, despues se va a buscar el Nº2 y me muestra el Nº1 digamos va como filtrando de a uno por vez y no todos a la vez

el campo fecha es date, tambien tengo registrada la hora en un campo time, y la id y el identificador son bigint
  #8 (permalink)  
Antiguo 23/01/2012, 19:09
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: consulta sin solucion..

Cita:
Iniciado por alears Ver Mensaje
el problema es que al estad dentro del bucle en el ejemplo que te di, busca el documento Nº1 y encuentra que salio, entronces no lo muestra, pero me muestra el Nº2, hasta ahi correcto, despues se va a buscar el Nº2 y me muestra el Nº1 digamos va como filtrando de a uno por vez y no todos a la vez

el campo fecha es date, tambien tengo registrada la hora en un campo time, y la id y el identificador son bigint
pero si hiciera una sola consulta deberia funcionar, en efecto como dijo Nemutagk
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #9 (permalink)  
Antiguo 23/01/2012, 19:12
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

Pero es que no es necesaria la segunda sentencia dentro del while de la primera, ya que desde el comienzo te esta retornando todas las coincidencias, aparte, estas mandando a llamar a todos los campos con el * (asterisco), es redundante volver a llamar al mismo registro por el identificador...

Ahora, suponiendo que por x razón es necesario hacerlo (que no lo es) debería regresarte el mismo registro que arrojo la consulta anterior, si no lo esta haciendo es que tu identificador no es único, y eso es un error de diseño, pero claro, esto lo estoy suponiendo conforme a lo que has indicado...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #10 (permalink)  
Antiguo 23/01/2012, 19:12
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por malakian Ver Mensaje
pero si hiciera una sola consulta deberia funcionar, en efecto como dijo Nemutagk
el tema es que si hago una sola consulta me mostraria solo los que entraron o solo los que salieron y lo que yo necesito es una especie de comparacion, para ver si los que entraron salieron o no antes de esa fecha, si salieron antes de esa fecha que no me los muestre y si no salieron antes de esa fecha entonces que si me los muestre, tal vez se puede hacer todo en la misma consulta, pero no se me ocurre como y ahi estoy parado
  #11 (permalink)  
Antiguo 23/01/2012, 19:15
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
Pero es que no es necesaria la segunda sentencia dentro del while de la primera, ya que desde el comienzo te esta retornando todas las coincidencias, aparte, estas mandando a llamar a todos los campos con el * (asterisco), es redundante volver a llamar al mismo registro por el identificador...

Ahora, suponiendo que por x razón es necesario hacerlo (que no lo es) debería regresarte el mismo registro que arrojo la consulta anterior, si no lo esta haciendo es que tu identificador no es único, y eso es un error de diseño, pero claro, esto lo estoy suponiendo conforme a lo que has indicado...
claro eso es lo que esta pasando me devuelve los registros repetidos en las dos consultas, ahora necesitaria que si estan repetidos no los muestre pero si alguno no se repite entonces que si lo muestre, esa seria la solucion a lo que necesito, pero dentro del bucle no logro esa comparacion... en realidad no se como se haria en un bucle
  #12 (permalink)  
Antiguo 23/01/2012, 19:19
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: consulta sin solucion..

Código PHP:
Ver original
  1. $resulta=mysql_query("select * from documentos Where estado='egreso'
  2. and  fecha<'$fecha'",$link);
  3. while($uno=mysql_fetch_array($resulta)){
  4. $identegreso=$uno['identificador'];
  5. echo $identingreso."<br />";
  6. }

Yo no entiendo!! es que esto no es lo que se necesita???
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #13 (permalink)  
Antiguo 23/01/2012, 19:24
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

Cita:
Iniciado por alears Ver Mensaje
el tema es que si hago una sola consulta me mostraria solo los que entraron o solo los que salieron y lo que yo necesito es una especie de comparacion, para ver si los que entraron salieron o no antes de esa fecha, si salieron antes de esa fecha que no me los muestre y si no salieron antes de esa fecha entonces que si me los muestre, tal vez se puede hacer todo en la misma consulta, pero no se me ocurre como y ahi estoy parado
A ver si entendí bien, según esto, si los registros no han salido (egresado) deben de mostrarse, osea que pueden estar como ingreso o egreso, pero si son egreso solo los que se dieron como egreso después de la fecha indicada, es eso?

si así es lo que haría seria mandar a llamar a todos los registros que estén posteriores a la fecha, y solo indicar los que se egresaron o todavía están en "espera" de ser egresados
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #14 (permalink)  
Antiguo 23/01/2012, 19:29
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por malakian Ver Mensaje
Código PHP:
Ver original
  1. $resulta=mysql_query("select * from documentos Where estado='egreso'
  2. and  fecha<'$fecha'",$link);
  3. while($uno=mysql_fetch_array($resulta)){
  4. $identegreso=$uno['identificador'];
  5. echo $identingreso."<br />";
  6. }

Yo no entiendo!! es que esto no es lo que se necesita???

la forma en que guardo los datos en la bd es la siguiente

Código:
ID | documento | estado     | fecha    | identificador
1   |     Nº1  |  ingreso   | 23/09   |        0          
2   |     Nº 2 |  ingreso   |  23/09  |        0         
3   |     Nº 1 |  egreso    |  23/09  |        1    
4   |     Nº 2 |  egreso    |  25/09  |        2
en este ejemplo no deberia traerme el documeto Nº1 si yo filtrara por fecha menor al 24/09, y la comparacion que intento hacer es que si el identificador y la id son iguales entonces entro y salio el mismo documento
  #15 (permalink)  
Antiguo 23/01/2012, 19:34
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
A ver si entendí bien, según esto, si los registros no han salido (egresado) deben de mostrarse, osea que pueden estar como ingreso o egreso, pero si son egreso solo los que se dieron como egreso después de la fecha indicada, es eso?

si así es lo que haría seria mandar a llamar a todos los registros que estén posteriores a la fecha, y solo indicar los que se egresaron o todavía están en "espera" de ser egresados
claro es como decis en la primera parte si los registros no han salido (egresado) deben de mostrarse, es bueno lo que decis, estoy tratando de hacerme una idea de como seria
  #16 (permalink)  
Antiguo 23/01/2012, 19:37
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

Cita:
Iniciado por alears Ver Mensaje
la forma en que guardo los datos en la bd es la siguiente

Código:
ID | documento | estado     | fecha    | identificador
1   |     Nº1  |  ingreso   | 23/09   |        0          
2   |     Nº 2 |  ingreso   |  23/09  |        0         
3   |     Nº 1 |  egreso    |  23/09  |        1    
4   |     Nº 2 |  egreso    |  25/09  |        2
en este ejemplo no deberia traerme el documeto Nº1 si yo filtrara por fecha menor al 24/09, y la comparacion que intento hacer es que si el identificador y la id son iguales entonces entro y salio el mismo documento
Según yo tienes un pequeño problema de diseño, no veo para que duplicas la información (al menos no lo has indicado si es un requerimiento), pero a simple vista es hacer el trabajo dos veces, el campo "estado" debería funcionar como un switch, o bandera, cuando es egresado deberías modificar dicho campo, no agregar una nueva fila, así automáticamente se descartaría en tus consultas, no se si me entiendes, aparte de que la tabla se optimizaría al evitar estar repitiendo la información, ahora, al modificar el campo estado deberías tener un campo fechaIngreso y fechaEgreso, y podrías obtener la información de mejor manera
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #17 (permalink)  
Antiguo 23/01/2012, 19:41
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
Según yo tienes un pequeño problema de diseño, no veo para que duplicas la información (al menos no lo has indicado si es un requerimiento), pero a simple vista es hacer el trabajo dos veces, el campo "estado" debería funcionar como un switch, o bandera, cuando es egresado deberías modificar dicho campo, no agregar una nueva fila, así automáticamente se descartaría en tus consultas, no se si me entiendes, aparte de que la tabla se optimizaría al evitar estar repitiendo la información, ahora, al modificar el campo estado deberías tener un campo fechaIngreso y fechaEgreso, y podrías obtener la información de mejor manera
Completamente de acuerdo, en este caso es mejor un UPDATE a un INSERT, esa es la solucion
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #18 (permalink)  
Antiguo 23/01/2012, 19:42
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
Según yo tienes un pequeño problema de diseño, no veo para que duplicas la información (al menos no lo has indicado si es un requerimiento), pero a simple vista es hacer el trabajo dos veces, el campo "estado" debería funcionar como un switch, o bandera, cuando es egresado deberías modificar dicho campo, no agregar una nueva fila, así automáticamente se descartaría en tus consultas, no se si me entiendes, aparte de que la tabla se optimizaría al evitar estar repitiendo la información, ahora, al modificar el campo estado deberías tener un campo fechaIngreso y fechaEgreso, y podrías obtener la información de mejor manera
es buena idea, el problema es que estadisticamente necesito dejar asentado cada registro para poder verificar quien realizo el movimiento, si edito el ingreso/egreso tendria una base mucho mas liviana es cierto, pero perderia los registros antiguos y ahi me matan jajaja
  #19 (permalink)  
Antiguo 23/01/2012, 19:44
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por malakian Ver Mensaje
Completamente de acuerdo, en este caso es mejor un UPDATE a un INSERT, esa es la solucion
pero en caso de un update perderia las fechas o no? digamos las estaria actualizando permanente y en la base solo tendria asentado los ultimos registros y no los anteriores, si quisiera hacer una busqueda a registros de uno o dos años atras no los tendria
  #20 (permalink)  
Antiguo 23/01/2012, 19:46
Avatar de malakian  
Fecha de Ingreso: septiembre-2010
Ubicación: $malakian->Colombia();
Mensajes: 469
Antigüedad: 13 años, 7 meses
Puntos: 45
Respuesta: consulta sin solucion..

Cita:
Iniciado por alears Ver Mensaje
es buena idea, el problema es que estadisticamente necesito dejar asentado cada registro para poder verificar quien realizo el movimiento, si edito el ingreso/egreso tendria una base mucho mas liviana es cierto, pero perderia los registros antiguos y ahi me matan jajaja
Yo pensaria que podria llevar esos registros en una tabla aparte, ligando el ID del registro padre en la tabla hijo, asi puedes ir actualizando el estado y en la otra tabla llevar las estadisticas
__________________
Guitar Loco, Desarrollador Web PHP
Sigueme: @jose1x
  #21 (permalink)  
Antiguo 23/01/2012, 19:46
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

Cita:
Iniciado por alears Ver Mensaje
es buena idea, el problema es que estadisticamente necesito dejar asentado cada registro para poder verificar quien realizo el movimiento, si edito el ingreso/egreso tendria una base mucho mas liviana es cierto, pero perderia los registros antiguos y ahi me matan jajaja
No necesariamente, incluso sería mejor, checa lo siguiente...
Código:
id	|  documento	|  estado	|  fechaIngreso		|  fechaEgreso
1	|  n1		|  egreso	|  23/09		|  23/09
2	|  n2		|  egreso	|  23/09		|  25/09
Con una tabla así es muy fácil obtener los resultados y tendrías la misma información que en tu tabla original...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #22 (permalink)  
Antiguo 23/01/2012, 19:52
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
No necesariamente, incluso sería mejor, checa lo siguiente...
Código:
id	|  documento	|  estado	|  fechaIngreso		|  fechaEgreso
1	|  n1		|  egreso	|  23/09		|  23/09
2	|  n2		|  egreso	|  23/09		|  25/09
Con una tabla así es muy fácil obtener los resultados y tendrías la misma información que en tu tabla original...
me gusta lo que veo, deberia haber trabajado asi desde el principio, el tema es que si no encuentro forma de solucionarlo con lo que tengo ahora tengo que poner gente a cargar mas de 1000 registros nuevamente, igual tu ejemplo es realmente muy practico gracias por aclararme con eso, buscar los resultados que necesito con la estructura de tabla que planteas seria realmente simple
  #23 (permalink)  
Antiguo 23/01/2012, 19:56
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

No necesariamente, puedes "automatizar" la migración entre tablas, solo seria hacer un select de un tabla, luego en el loop (while) hacer una busqueda del documento para ver si ya se ingreso de nuevo y ver su "nuevo" estado, si se encuentra se cambia el estado y se agrega la fecha de dicho cambio, si no se encuentra nada, se supondrá que sigue como ingresado...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #24 (permalink)  
Antiguo 23/01/2012, 20:01
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por Nemutagk Ver Mensaje
No necesariamente, puedes "automatizar" la migración entre tablas, solo seria hacer un select de un tabla, luego en el loop (while) hacer una busqueda del documento para ver si ya se ingreso de nuevo y ver su "nuevo" estado, si se encuentra se cambia el estado y se agrega la fecha de dicho cambio, si no se encuentra nada, se supondrá que sigue como ingresado...
voy a intentarlo a ver que sale, sinceramente prefiero cargar todo de nuevo aunque sea mano que seguir con esto, ya llevo4 dias quemandome la cabeza, gracias a los dos por responder, pruebo migrar todo y escribo aca para contar como me fue gracias chicos
  #25 (permalink)  
Antiguo 23/01/2012, 20:30
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: consulta sin solucion..

Suponiendo que te entendí bien, tienes dos registros por cada documento, uno con la fecha y estado de "ingreso", y el otro con la fecha y estado de "egreso", y además cuentas con un campo donde se almacena el numero de documento en cuestión.
Por lo que dices en un momento, quieres que la base te devuelva todos los documentos que ingresaron antes de una fecha y no egresaron.
Suponiendo también que por cada documento hay una sola entrada y una sola salida, la cosa sería mas o menos:
Código MySQL:
Ver original
  1.     documentos I LEFT JOIN documentos E ON I.documento = E.documento
  2.     I.estado = 'ingreso'
  3.     AND E.estado = 'salida'
  4.     AND I.fecha<'2012-01-23'
  5.     AND E.fecha IS NULL;

Si lo que quieres es el conjunto de documentos que si se terminaron, la consulta es más simple:
Código MySQL:
Ver original
  1.     documentos I INNER JOIN documentos E ON I.documento = E.documento
  2.     I.estado = 'ingreso'
  3.     AND E.estado = 'salida'
  4.     AND I.fecha<'2012-01-23'
  5.     AND E.fecha<'2012-01-23';

El PHP que falta te lo dejo a ti.

Nota: Trata de ser mas técnico en las descripciones. Piensa que los que leen lo que escribes no tienen ni idea de qué es lo que estás programando.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 23/01/2012 a las 20:37
  #26 (permalink)  
Antiguo 23/01/2012, 20:32
Avatar de Nemutagk
Colaborador
 
Fecha de Ingreso: marzo-2004
Ubicación: México
Mensajes: 2.633
Antigüedad: 20 años, 1 mes
Puntos: 406
Respuesta: consulta sin solucion..

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Suponiendo que te entendí bien, tienes dos registros por cada documento, uno con la fecha y estado de "ingreso", y el otro con la fecha y estado de "egreso", y además cuentas con un campo donde se almacena el numero de documento en cuestión.
Por lo que dices en un momento, quieres que la base te devuelva todos los documentos que ingresaron antes de una fecha y no egresaron.
Suponiendo también que por cada documento hay una sola entrada y una sola salida, la cosa sería mas o menos:
Código MySQL:
Ver original
  1.     documentos I INNER JOIN documentos E ON I.documento = E.documento
  2.     I.estado = 'ingreso'
  3.     AND E.estado = 'salida'
  4.     AND I.fecha<'2012-01-23'
  5.     AND E.fecha IS NULL;

Si lo que quieres es el conjunto de documentos que si se terminaron, la consulta es más simple:
Código MySQL:
Ver original
  1.     documentos I INNER JOIN documentos E ON I.documento = E.documento
  2.     I.estado = 'ingreso'
  3.     AND E.estado = 'salida'
  4.     AND I.fecha<'2012-01-23'
  5.     AND E.fecha<'2012-01-23';

El PHP que falta te lo dejo a ti.

Nota: Trata de ser mas técnico en las descripciones. Piensa que los que leen lo que escribes no tienen ni idea de qué es lo que estás programando.
joder!! que buena solución...
__________________
Listo?, tendría que tener 60 puntos menos de IQ para considerarme listo!!!
-- Sheldon Cooper
http://twitter.com/nemutagk
PD: No contestaré temas vía mensaje personal =)
  #27 (permalink)  
Antiguo 23/01/2012, 20:38
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: consulta sin solucion..

Nota: En la primera consulta debe ir LEFT JOIN y no INNER JOIN.
Se me chispoteó...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #28 (permalink)  
Antiguo 23/01/2012, 20:42
Avatar de alears  
Fecha de Ingreso: enero-2012
Mensajes: 15
Antigüedad: 12 años, 3 meses
Puntos: 0
Respuesta: consulta sin solucion..

Cita:
Iniciado por gnzsoloyo Ver Mensaje
Suponiendo que te entendí bien, tienes dos registros por cada documento, uno con la fecha y estado de "ingreso", y el otro con la fecha y estado de "egreso", y además cuentas con un campo donde se almacena el numero de documento en cuestión.
Por lo que dices en un momento, quieres que la base te devuelva todos los documentos que ingresaron antes de una fecha y no egresaron.
Suponiendo también que por cada documento hay una sola entrada y una sola salida, la cosa sería mas o menos:
Código MySQL:
Ver original
  1.     documentos I INNER JOIN documentos E ON I.documento = E.documento
  2.     I.estado = 'ingreso'
  3.     AND E.estado = 'salida'
  4.     AND I.fecha<'2012-01-23'
  5.     AND E.fecha IS NULL;

Si lo que quieres es el conjunto de documentos que si se terminaron, la consulta es más simple:
Código MySQL:
Ver original
  1.     documentos I INNER JOIN documentos E ON I.documento = E.documento
  2.     I.estado = 'ingreso'
  3.     AND E.estado = 'salida'
  4.     AND I.fecha<'2012-01-23'
  5.     AND E.fecha<'2012-01-23';

El PHP que falta te lo dejo a ti.

Nota: Trata de ser mas técnico en las descripciones. Piensa que los que leen lo que escribes no tienen ni idea de qué es lo que estás programando.
hola amigo, como escribi arriba la base de datos tiene esta estructura:
Código:
ID | documento | estado     | fecha    | identificador
1   |     Nº1  |  ingreso   | 23/09   |        0          
2   |     Nº 2 |  ingreso   |  23/09  |        0         
3   |     Nº 1 |  egreso    |  23/09  |        1    
4   |     Nº 2 |  egreso    |  25/09  |        2
simplemente los que estaba buscando es que si la ID es igual al identificador no me muestre la ID ni la fila del identificador si por el contrario la ID es distita al identificador si la muestre, toda esta consulta delimitada siempre por fecha<$fecha que elige el usuario. eso es todo, probe con join pero tuve dos problemas, el primero es que la consulta se puso lentisima, y el segundo que he leido muy poco sobre join y a la hora de modificarla no sabria por donde empezar, tal vez deberia estudiarlo un poco mas, gracias por la respuesta

Última edición por alears; 23/01/2012 a las 21:16

Etiquetas: bucle, query
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 18:57.