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

Problema con consulta MySql

Estas en el tema de Problema con consulta MySql en el foro de Mysql en Foros del Web. Hola buenos días a mis amigos del FDW como lo dice el titulo tengo problemas con una consulta mysql la cual es la siguiente: Código: ...
  #1 (permalink)  
Antiguo 31/08/2012, 07:13
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
Puntos: 19
Problema con consulta MySql

Hola buenos días a mis amigos del FDW como lo dice el titulo tengo problemas con una consulta mysql la cual es la siguiente:

Código:
select distinct c.ID,c.name,c.user,case tc.task when 84 then tc.task else null end task from collaborators c left join tasks_collaborators tc on c.ID = tc.collaborator order by 1
y retorna estos valores:

Código:
ID	name	user	task
9	Administración	4	84
9	Administración	4	(null)
12	Raimundo	4	(null)
12	Raimundo	4	84
13	Compras	4	(null)
14	RH	4	(null)
15	Proveedor	4	(null)
16	Yuraima Salas	4	(null)
17	Sandra	4	(null)
18	Contabilidad	4	(null)
resulta que lo que quiero hacer es que no me aparescan valores repetidos pero que respete cuando la columna "task" tenga un valor diferente a null. he intentado de muchas maneras pero esta es la mas acercada.

Espero que me puedan ayudar.
  #2 (permalink)  
Antiguo 31/08/2012, 08:53
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con consulta MySql

Hola jlct:

En realidad yo no veo ningún valor repetido, es decir, cada combinación es única, aunque algunos usuarios aparecen más de una vez, pues la tarea es distinta en cada tupla...

Sería conveniente que nos pusieras cómo tienes tus datos organizados en tus tablas collaborators y tasks_collaborators, en realidad no me queda claro qué es lo que quieres obtener... a partir de los datos entonces dinos qué es exactamente lo que quieres obtener, igual y podemos plantearte una solución distinta a lo que estás tratando de hacer.

Saludos
Leo
  #3 (permalink)  
Antiguo 31/08/2012, 09:00
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
Puntos: 19
Respuesta: Problema con consulta MySql

Hola leonardo_josue gracias por responder!
Te explico lo que quiero obtener es lo siguiente:

Código MySQL:
Ver original
  1. ID  name    user    task
  2. 9   Administración 4   84
  3. 12  Raimundo    4   84
  4. 13  Compras 4   (null)
  5. 14  RH  4   (null)
  6. 15  Proveedor   4   (null)
  7. 16  Yuraima Salas   4   (null)
  8. 17  Sandra  4   (null)
  9. 18  Contabilidad    4   (null)

que me omita estas lineas

Código MySQL:
Ver original
  1. 9   Administración 4   (null)
  2. 12  Raimundo    4   (null)

Esto para en mi formulario lograr marcar solo las que tienen valores y mostrar las demas (Esa parte ya esta funcionando) por eso quiero mejorar la consulta

espero me hayas entendido.
  #4 (permalink)  
Antiguo 31/08/2012, 09:27
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con consulta MySql

Hola de nuevo...

Entonces, si entendí correctamente, lo que pretendes es que si un usuario tiene al menos una tarea asignada, entonces que no aparezca el registro con NULL cierto???

Pero lo que me parece extraño es por qué estás obteniendo estos resultados... te pido una vez mas que nos pongas los resultados de tus tablas por separados, es decir, qué datos hay en tus tablas collaborators y tasks_collaborators... creo que sería más sencillo corregir desde origen que corregir lo que tienes hecho..

Saludos
Leo.
  #5 (permalink)  
Antiguo 31/08/2012, 09:59
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
Puntos: 19
Respuesta: Problema con consulta MySql

ok aqui van los datos de las tablas

collaborators

Código MySQL:
Ver original
  1. select * from collaborators

Código MySQL:
Ver original
  1. ID  name                    user
  2. 9   Administración 4
  3. 12  Raimundo            4
  4. 13  Compras         4
  5. 14  RH                          4
  6. 15  Proveedor           4
  7. 16  Yuraima Salas   4
  8. 17  Sandra                  4
  9. 18  Contabilidad            4

tasks_collaborators

Código MySQL:
Ver original
  1. select * from tasks_collaborators

Código MySQL:
Ver original
  1. ID  task    collaborator
  2. 81  28          18
  3. 82  32          18
  4. 86  25          9
  5. 87  25          13
  6. 88  24          9
  7. 89  24          12
  8. 90  23          9
  9. 91  52          15
  10. 92  40          14
  11. 93  40          15
  12. 94  50          15
  13. 95  55          17
  14. 96  51          16
  15. 102 42          14
  16. 103 42          15
  17. 104 54          15
  18. 105 39          14
  19. 106 39          15
  20. 107 38          14
  21. 108 38          15
  22. 109 41          14
  23. 110 41          15
  24. 112 53          15
  25. 118 72          9
  26. 119 72          14
  27. 120 74          14
  28. 121 80          9
  29. 122 80          12
  30. 123 81          9
  31. 124 81          14
  32. 125 82          13
  33. 126 83          9
  34. 127 84          9
  35. 128 84          12

Esa es la data, espero tengas una idea mas clara de como podrias ayudarme, y gracias por interesarte en el tema
  #6 (permalink)  
Antiguo 31/08/2012, 10:25
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con consulta MySql

Hola de nuevo:

En realidad no entiendo mucho la lógica de la consulta... el CASE-WHEN me dice que sólo te interesan aquellos usuarios que tengan asignada la tarea 84... los demás no los consideras, pues le asignas un NULL directamente... hay varias formas de resolver la consulta una sería con dos subconsultas y un UNION... sería más o menos así:

Código MySQL:
Ver original
  1. mysql> SELECT
  2.     -> DISTINCT c.ID, c.name,c.user,
  3.     ->   tc.task
  4.     -> FROM collaborators c
  5.     -> LEFT JOIN tasks_collaborators tc ON c.ID = tc.collaborator
  6.     -> WHERE tc.task = 84
  7.     -> UNION
  8.     -> SELECT
  9.     -> DISTINCT c.ID, c.name,c.user,NULL
  10.     -> FROM collaborators c
  11.     -> LEFT JOIN tasks_collaborators tc ON c.ID = tc.collaborator
  12.     -> WHERE NOT EXISTS (SELECT collaborator
  13.     ->                   FROM tasks_collaborators tc2
  14.     ->                   WHERE tc.collaborator = tc2.collaborator AND
  15.     ->                   tc2.task = 84);
  16. +------+----------------+------+------+
  17. | ID   | name           | user | task |
  18. +------+----------------+------+------+
  19. |    9 | Administracion |    4 |   84 |
  20. |   12 | Raimundo       |    4 |   84 |
  21. |   13 | Compras        |    4 | NULL |
  22. |   14 | RH             |    4 | NULL |
  23. |   15 | Proveedor      |    4 | NULL |
  24. |   16 | Yuraima Salas  |    4 | NULL |
  25. |   17 | Sandra         |    4 | NULL |
  26. |   18 | Contabilidad   |    4 | NULL |
  27. +------+----------------+------+------+
  28. 8 rows in set (0.02 sec)
en la primer parte sólo considera los usuarios que tienen la tarea 84, en la seguna parte todos aquellos que no tienen asignada la tarea (por eso el NOT EXISTS)... en realidad no sé sí es la mejor opción, es cuestión de que sigas investigando un poco para ver si encuentras algo más óptimo.

Saludos
Leo.
  #7 (permalink)  
Antiguo 31/08/2012, 10:46
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
Puntos: 19
Respuesta: Problema con consulta MySql

Muchas gracias!!! la logica que implemento es xq el resultado de esa consulta la uso en el formulario cuando se va a editar algun registro.. necesito marcar los que ya tiene asignado pero tambien mostrar los demas por si el usuario desea agregar algun colaborador mas.
  #8 (permalink)  
Antiguo 31/08/2012, 11:55
Colaborador
 
Fecha de Ingreso: enero-2007
Ubicación: México
Mensajes: 2.097
Antigüedad: 17 años, 3 meses
Puntos: 447
Respuesta: Problema con consulta MySql

Entonces la consulta en realidad es mucho más sencilla de lo que supuse... creo que esto también te serviría:

Código MySQL:
Ver original
  1. mysql> SELECT c.*, tc.task
  2.     -> FROM collaborators c
  3.     -> LEFT JOIN tasks_collaborators tc
  4.     -> ON c.id = tc.collaborator AND tc.task = 84;
  5. +------+----------------+------+------+
  6. | id   | name           | user | task |
  7. +------+----------------+------+------+
  8. |    9 | Administracion |    4 |   84 |
  9. |   12 | Raimundo       |    4 |   84 |
  10. |   13 | Compras        |    4 | NULL |
  11. |   14 | RH             |    4 | NULL |
  12. |   15 | Proveedor      |    4 | NULL |
  13. |   16 | Yuraima Salas  |    4 | NULL |
  14. |   17 | Sandra         |    4 | NULL |
  15. |   18 | Contabilidad   |    4 | NULL |
  16. +------+----------------+------+------+
  17. 8 rows in set (0.06 sec)

El resultado es el mismo que con la consulta anterior, pero mucho más sencillo... ahora vez por qué es bueno que expliques a detalle todo lo que quieres hacer jejejejeje.

Saludos
Leo.
  #9 (permalink)  
Antiguo 31/08/2012, 11:57
Avatar de jlct  
Fecha de Ingreso: abril-2012
Ubicación: Venezuela
Mensajes: 148
Antigüedad: 12 años
Puntos: 19
Respuesta: Problema con consulta MySql

Jaajajajaa... Tienes razon!! Muchas Gracias por tu ayuda! doy por cerrado el tema..!

Etiquetas: Ninguno
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 00:52.