Omitir datos repetidos en mysql

Temas sobre programación ( php, c, sql, html, perl, python, ruby, java, bash, etc ) y recursos ( herramientas, frameworks, hosting, cms, etc )

Moderadores: akodo, maiku

Responder
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Omitir datos repetidos en mysql

Mensaje por greer » Mar Ago 24, 2010 7:43 pm

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
Última edición por greer el Jue Oct 21, 2010 5:37 am, editado 2 veces en total.
http://greermurray.com
Avatar de Usuario
mcun
Administrador
Administrador
Mensajes: 3888
Registrado: Lun Abr 19, 2010 12:30 am
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por mcun » Mar Ago 24, 2010 10: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
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809
Avatar de Usuario
akodo
Moderador
Moderador
Mensajes: 1457
Registrado: Mié Nov 28, 2007 8:00 am
Ubicación: En la X del explorer (pulse para llamar)

Re: Omitir datos repetidos en mysql

Mensaje por akodo » Mar Ago 24, 2010 11: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" -> ([url=http://ctrlalt.iespana.es]mmlf[/url])
Última versión del gestor "Music Manager" -> ([url=http://sourceforge.net/projects/jmusicmanager/]jmmm[/url])
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Omitir datos repetidos en mysql

Mensaje por greer » Mié Ago 25, 2010 4:11 am

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://greermurray.com
Avatar de Usuario
mcun
Administrador
Administrador
Mensajes: 3888
Registrado: Lun Abr 19, 2010 12:30 am
Ubicación: En una de las nalgas del culo del mundo (según la Bersuit Vergarabat)
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por mcun » Mié Ago 25, 2010 4:56 am

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
Los programadores de verdad no documentan. La documentación es para los idiotas que no pueden leer un volcado de memoria.

Trusted Network and Developer | Lee el Reglamento !! |WIKI-EL | Twitter @mr_mcun
Debian + TTY | ArchLinux + awesome | openSUSE + Gnome-Shell | Linux User #508809
Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1519
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por maiku » Mié Ago 25, 2010 6:24 am

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: Seleccionar todo

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!!!
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Omitir datos repetidos en mysql

Mensaje por greer » Mié Ago 25, 2010 6:17 pm

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://greermurray.com
Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1519
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por maiku » Mié Ago 25, 2010 8: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!!!
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Omitir datos repetidos en mysql

Mensaje por greer » Jue Ago 26, 2010 6:59 pm

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://greermurray.com
Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1519
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por maiku » Vie Ago 27, 2010 6:18 am

Hola, pues se me ocurre que agrupes la búsqueda, para cada cliente, un reporte algo así:

Código: Seleccionar todo

----------------------------------------------------------------------------------------
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!!!
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Omitir datos repetidos en mysql [SOLUCIONADO]

Mensaje por greer » Jue Oct 21, 2010 5:36 am

maiku disculpa mi lentitud de aprendizaje jejeje pero no entendi ?¿ #-o hablas de una sub-consulta ?¿

Saludos.
http://greermurray.com
Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1519
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por maiku » Vie Oct 22, 2010 7:25 pm

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!!!
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Omitir datos repetidos en mysql

Mensaje por greer » Sab Oct 23, 2010 4:56 am

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://greermurray.com
Avatar de Usuario
maiku
Moderador
Moderador
Mensajes: 1519
Registrado: Jue Abr 19, 2007 7:00 am
Ubicación: Cojutepeque, El Salvador C. A.
Contactar:

Re: Omitir datos repetidos en mysql

Mensaje por maiku » Sab Oct 23, 2010 5:41 am

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!!!
Avatar de Usuario
greer
Forista Medio
Forista Medio
Mensajes: 334
Registrado: Mar Feb 27, 2007 8:00 am
Ubicación: PANAMA

Re: Omitir datos repetidos en mysql

Mensaje por greer » Sab Oct 23, 2010 10: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.
muestra.zip
(24.06 KiB) Descargado 80 veces
http://greermurray.com
Responder
  • Similar Topics
    Respuestas
    Vistas
    Último mensaje