| Autor |
Mensaje |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Mar Ago 24, 2010 11:43 am |
|
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 
_________________ http://greer.nodolinux.com
Última edición por greer el Mié Oct 20, 2010 9:37 pm, editado 2 veces en total
|
|
|
|
 |
mcun

Moderador
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)
|
 Publicado: Mar Ago 24, 2010 2:39 pm |
|
|
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
|
|
|
|
 |
akodo

Moderador
Registrado: Mié Nov 28, 2007 12:00 am Mensajes: 1361 Ubicación: En la X del explorer (pulse para llamar)
|
 Publicado: Mar Ago 24, 2010 3:10 pm |
|
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)
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Mar Ago 24, 2010 8:11 pm |
|
|
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
|
|
|
|
 |
mcun

Moderador
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)
|
 Publicado: Mar Ago 24, 2010 8:56 pm |
|
|
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
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Mar Ago 24, 2010 10:24 pm |
|
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!!!
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Mié Ago 25, 2010 10:17 am |
|
|
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
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Mié Ago 25, 2010 12:17 pm |
|
|
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!!!
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Jue Ago 26, 2010 10:59 am |
|
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
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Jue Ago 26, 2010 10:18 pm |
|
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 repitenHay 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!!!
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Mié Oct 20, 2010 9:36 pm |
|
maiku disculpa mi lentitud de aprendizaje jejeje pero no entendi ?¿  hablas de una sub-consulta ?¿ Saludos.
_________________ http://greer.nodolinux.com
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Vie Oct 22, 2010 11:25 am |
|
|
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!!!
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Vie Oct 22, 2010 8:56 pm |
|
|
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
|
|
|
|
 |
maiku

Moderador
Registrado: Mié Abr 18, 2007 11:00 pm Mensajes: 1209 Ubicación: Cojutepeque, El Salvador C. A.
|
 Publicado: Vie Oct 22, 2010 9:41 pm |
|
|
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!!!
|
|
|
|
 |
greer

Forista Medio
Registrado: Mar Feb 27, 2007 12:00 am Mensajes: 279 Ubicación: PANAMA
|
 Publicado: Sab Oct 23, 2010 2:25 am |
|
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
|
|
|
|
 |
|
|
|