Reglamento general de los foros   •   FAQ   •   Buscar en el foro •  Registrarse | Iniciar sesión 



Foros Linux » Desarrollo » Programación


Nuevo tema Responder al tema
 [ 15 mensajes ] 
Patrocinadores

Autor
Buscar:
Mensaje

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Mar Ago 24, 2010 11:43 am 
Arriba  
Hola que tal tengo un pequeño problema con mysql. Hice un reporte en una hoja de calculo usando php y jalando datos de una base de datos mysql.

el problema es que se repiten varios datos, ejemplo: NOMBRE - APELLIDO - DEUDA - FECHA

el punto es que pueden haber muchos registros con el mismo nombre y apellido pero la DEUDA y FECHA son diferentes, como puedo hacer que no se repitan el nombre y el apellido pero que si salga la deuda y fecha pongo un ejemplo adjunto...

Tengo varios dias tratando de hacer eso pero no lo consigo.
a ver si me dan una mano.

Muchas gracias



Imagen

_________________
http://greer.nodolinux.com


Última edición por greer el Mié Oct 20, 2010 9:37 pm, editado 2 veces en total
 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Dom Abr 18, 2010 4:30 pm
Mensajes: 2790
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)

Nota Publicado: Mar Ago 24, 2010 2:39 pm 
Arriba  
lo mas simple es mejorar el diseño de la bd si tuvieras dos tablas en las cuales una solo estarían los nombres y en la otra las transacciones te seria mucho mas simple con JOIN
lo mejor es que reestructures la BD separando lo mas posible los datos así ya evitaras problemas futuros

_________________
... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..

Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM
Debian| ArchLinux |Linux User #508809

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Nov 28, 2007 12:00 am
Mensajes: 1361
Ubicación: En la X del explorer (pulse para llamar)

Nota Publicado: Mar Ago 24, 2010 3:10 pm 
Arriba  
m[cun] escribió:
lo mas simple es mejorar el diseño de la bd si tuvieras dos tablas en las cuales una solo estarían los nombres y en la otra las transacciones te seria mucho mas simple con JOIN
lo mejor es que reestructures la BD separando lo mas posible los datos así ya evitaras problemas futuros

Lo mismo iba a decir yo.

Lo que necesitas son dos tablas: una para las personas (nombre, apellidos) y otra para las deudas (deuda y fecha). Supongo que estaré en lo correcto diciendo que una persona se distingue por su nombre y apellidos: para ser más claros "Juan Benítez" es diferente de "Juan López" y de "Jesús Benítez". Esto que parece una estupidez (seguro que no soy el único que piensa así :) ) nos va a hacer añadir un campo "identificador" (o como lo quieras llamar) que sea único (realmente va a ser la clave primaria de la tabla, pero no quiero entrar en tecnicismos). Este identificador es el que tienes que utilizar para asociar a las personas con sus deudas.

Por otro lado, en las deudas tienes que añadir otro campo que va a ser para almacenar el identificador de la persona. De esta forma, cuando quieras saber las deudas de una persona, accedes a la tabla personas, obtienes su identificador y con el buscas sus deudas en la tabla de deudas. Si quieres saber de quien es una deuda, tan sólo tienes que obtener el identificador asociado a la deuda y buscarlo en la tabla de personas.

Estoy suponiendo que una deuda sólo puede ser de una persona, y que una persona puede tener varias deudas. De no ser así es posible que haya que cambiar cosas en el planteamiento

_________________
Descargue el gestor de mp3 "Music Manager" -> (mmlf)
Última versión del gestor "Music Manager" -> (jmmm)

 Perfil  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Mar Ago 24, 2010 8:11 pm 
Arriba  
yo obtengo los datos de una base de datos de un CRM (sugarcrm), ahora bien, tiene que haber alguna solucion para eso, digo no ? si ven en la imagen veran que hay 3 filas con el mismo cliente, una de ellas esta bien ya que tiene datos diferentes (factura, fecha y todo lo demas) entonces en las otras aparece 2 registros con la misma factura la misma fecha pero diferente recibo, entonces lo que quiero es que solo aparescan 2 registros y el otro que tiene los mismos datos se omita los 5 primeros campos ya que se repiten arriba los otros campos no ya que son diferentes... no se si me explique bien...

Gracias nuevamente y saludos.

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Dom Abr 18, 2010 4:30 pm
Mensajes: 2790
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)

Nota Publicado: Mar Ago 24, 2010 8:56 pm 
Arriba  
la solución difícil es usar expresiones regulares en php para filtrar la consulta. ya que su realizas un filtro sql se volverla impreciso, las expresiones regulares son algo complejas ya que se prestan a bugs y en código lineal olvídalo ya que no podrás jamas prever todas las situaciones y seria muy grande y pesado.
al menos asta allí llegan mis conocimientos

saludos

_________________
... reinstalar un SO cuando produce un error es como tirar un bebe a la basura cuando se hace caca..

Trusted Network and Developer | Reglamento General de los Foros |WIKI-EL | Twitter @SISIAM
Debian| ArchLinux |Linux User #508809

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Mar Ago 24, 2010 10:24 pm 
Arriba  
hola greer, veo que luego del apellido se encuentra un campo con un número que se repite 1683. Me pregunto si es un identificador para la transacción, es muy importante que se encuentre sea este u otro el valor que haga las veces de identificador único. También si en dado caso sea una transacción que no se llevó a cabo (que muchas veces sucede, el cliente va a comprar y dice: dejé la cartera, ya no me llevo nada, por su puesto que no se marca como devolución) en este caso, un campo booleano marcando como procesado true or false sirve. Bueno al grano, el punto es el siguiente: puedes contar el registro repetido y agruparlo:

Código:
select count(*),  apellido, identificador, fecha, etc from mitabla group by identificador


obtendrías algo como:
2| |kyo| |1683| | 11/08/2010 | | etc

si agrupas por apellido, perderás en vez de un registro repetido, todos los que existan, por que solo muestra la primer fila (dependiendo del ordenamiento) de tu resultado.

Ya luego con el campo count(*) con el cual has agrupado, simplemente puedes obviarlo en tu reporte.

¿Es esa una posible solución al problema? ¿Te sirve? O_o?

Otra forma es trabajando con cursores, ale, que mysql trabaja con transact :)

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Mié Ago 25, 2010 10:17 am 
Arriba  
ok aun no pruebo lo que me dices maiku pero te cuento un poco, a ver si es lo mismo.

esta el campo:

nombre, numero de factura, fecha de factura, monto de factura, moneda usada

y los otros campos son:

numero de recibo, monto de recibo, moneda usada y total.

ahora bien se da el caso del cliente de la imagen, KYO en el cual debe una factura y ha dopositado dos veces por eso salen dos registros con el mismo numero de factura pero distinto numero de recibo... lo que se quiere es que no se repita los 4 primeros campos despues del nombre ya que se repite en el registro de arriba.

lo que me planteaste hace eso que digo ?

Gracias maiku

Editado -- Jue Ago 26, 2010 2:17 am --

esos 4 campos despues del nombre deben aparecer en blanco y solo deben aparecer los campos de recibos:

numero de recibo, monto de recibo, moneda usada y total.

solo en los casos que el cliente abone algo a la factura.

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Mié Ago 25, 2010 12:17 pm 
Arriba  
hola, por el contrario, omite filas, había entendido mal, cuando salga del trabajo veo alguna posible modificación

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Jue Ago 26, 2010 10:59 am 
Arriba  
que tal maiku,

que pudiste averiguar ? mira que yo tambien estaba bucando y trate de hacerlo con GROUP BY pero nada...

seguire viendo como lo puedo hacer... si tienes algo y le pudiste meterle mente, avisame :)

tengo hasta el lunes para entregarlo jjajaja pero bueno, ya gran parte del trabjo lo hice solo falta eso :s

Saludos.

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Jue Ago 26, 2010 10:18 pm 
Arriba  
Hola, pues se me ocurre que agrupes la búsqueda, para cada cliente, un reporte algo así:
Código:
----------------------------------------------------------------------------------------
KYO | numerofactura(cantidad registros) | fecha factura | monto factura | moneda usada
----------------------------------------------------------------------------------------
(registro 1) | numero recibo | monto recibo |  moneda usada | total
(registro 2) | numero recibo | monto recibo |  moneda usada | total
   .
   .
(registro n) | numero recibo | monto recibo |  moneda usada | total
----------------------------------------------------------------------------------------


la forma que lo veo, es haciendo una búsqueda como indiqué en el mensaje anterior para únicamente esos campos.

Cuando se esté recorriendo el array de resultado, para cada uno de las filas, hacer otra consulta (sí adentro del bucle) para mostrar el otro grupo de resultados que ya no se repiten

Hay que tener cuidado para que el resultado no sea muy grande, lo mejor es poner limite a la consulta y también paginarlo.

Al menos de esa forma puede que funcione, hay que aprovechar que se está usando php también.

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Mié Oct 20, 2010 9:36 pm 
Arriba  
maiku disculpa mi lentitud de aprendizaje jejeje pero no entendi ?¿ #-o hablas de una sub-consulta ?¿

Saludos.

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Vie Oct 22, 2010 11:25 am 
Arriba  
pues sí, realizar otra consulta dentro del bucle de resultado de la primera búsqueda (esto con php) lo malo será que si son muchos resultados se harán muchas "subconsultas", el rendimiento puede ser muy pobre si no se le pone un límite (paginar).

Si tienes código y una BD de prueba puedo ver algo más.

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Vie Oct 22, 2010 8:56 pm 
Arriba  
tengo todo lo necesario, tu me diras, la verdad nunca he hecho una sub-consulta, es mas nisiquiera sabia que se podia hacer... (ahora estoy viendo en google como es ese asunto) podrias iniciarme en esto ? tendrias tiempo ? solo dime como hago y yo hago el resto... a ver si soluciono esto jeje!

no tengo muy claro cual es la funcion de las sub-consultas ni cual es su potencial, pero de seguro hoy aprendo algo.

Saludos.

Editado -- Sab Oct 23, 2010 12:56 pm --

mmm no, no son muchos resultado los que hay que mostrar, maximo 2 o 3 resultados puede haber... pero si hay que paginarlo se hace no hay problema...

_________________
http://greer.nodolinux.com

 Perfil WWW  

Desconectado
Moderador
Moderador
Avatar de Usuario

Registrado: Mié Abr 18, 2007 11:00 pm
Mensajes: 1209
Ubicación: Cojutepeque, El Salvador C. A.

Nota Publicado: Vie Oct 22, 2010 9:41 pm 
Arriba  
Pues no es que no se pueda hacer, no es siquiera algo estándar; es una idea mía que la he realizado anteriormente. Si puedes adjuntar un archivo con una pequeña estructura "modelo" de la BD (no original obvio por la privacidad del contenido) y un par de datos insertardos, puedo curiosear.

_________________
Grüße...
Maiku

Full linux alchemist!!!

 Perfil WWW  

Desconectado
Forista Medio
Forista Medio
Avatar de Usuario

Registrado: Mar Feb 27, 2007 12:00 am
Mensajes: 279
Ubicación: PANAMA

Nota Publicado: Sab Oct 23, 2010 2:25 am 
Arriba  
hola que tal, mira te voy adjuntar mi consulta y 2 imagenes, 1 de como sale actualmente usando la consulta que te adjunto y la segunda imagen es como debe quedar...

osea te adjunto la consulta y su resultado en la imagen 1 y la imagen 2 es como debe quedar... se ve facil pero derrepente si necesite una sub-consulta...


estoy leyendo como aplicar sub-consultas en: http://dev.mysql.com/doc/refman/5.0/es/subqueries.html pero no veo como aplicarlas en mi cunsulta para obtener el resultado que se espera tener...

Saludos.
Adjunto:
muestra.zip [24.06 KiB]
23 veces

_________________
http://greer.nodolinux.com

 Perfil WWW  
Mostrar mensajes previos:  Ordenar por  
 [ 15 mensajes ] 
Nuevo tema Responder al tema

Saltar a:  


¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 4 invitados

No puede abrir nuevos temas en este Foro
No puede responder a temas en este Foro
No puede editar sus mensajes en este Foro
No puede borrar sus mensajes en este Foro
No puede enviar adjuntos en este Foro

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group :: Style based on FI Subice by phpBBservice.nl :: Todos los horarios son UTC - 6 horas
Traducción al español por Huan Manwë
phpBB SEO