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

[SOLUCIONADO] Problema con Count y un largo select

Estas en el tema de Problema con Count y un largo select en el foro de Mysql en Foros del Web. Buenas foreros, Veréis tengo un problema al que le he dado muchas vueltas si solución, el tema es que tengo esta llamada @import url("http://static.forosdelweb.com/clientscript/vbulletin_css/geshi.css"); Código ...
  #1 (permalink)  
Antiguo 05/02/2014, 10:13
Avatar de lambar  
Fecha de Ingreso: marzo-2005
Ubicación: Murcia Fumeta
Mensajes: 55
Antigüedad: 19 años, 9 meses
Puntos: 0
Pregunta Problema con Count y un largo select

Buenas foreros,

Veréis tengo un problema al que le he dado muchas vueltas si solución, el tema es que tengo esta llamada
Código SQL:
Ver original
  1. SELECT u.id, u.empresa, u.mail, u.url, u.telefono, u.zona, u.nivel, COUNT( DISTINCT m.id ) AS Machines
  2. FROM m_usuarios u
  3. LEFT JOIN m_maquinas m ON m.id_dis = u.id
  4. WHERE u.eliminado =0
  5. GROUP BY u.id

pero en la tabla m_maquinas también está el campo eliminado y me cuenta las maquinas que están eliminadas, he intentado
Código SQL:
Ver original
  1. COUNT( DISTINCT m.id, m.eliminado = 0 )
pero se ha reído de mí lógicamente... xD
después de darle muchas vueltas no tengo mas remedio que acudir a los fieras que andáis por aquí, no me gusta pedir ayuda pero estoy un poco desesperado, a las malas hago 2 llamadas a la base de datos... xD

a ver quién me enseña lo que aún no sé... xD

Un saludo y un gúgol de gracias

Última edición por gnzsoloyo; 05/02/2014 a las 10:27
  #2 (permalink)  
Antiguo 05/02/2014, 10:31
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Count y un largo select

No lo compliques:
Código SQL:
Ver original
  1. SELECT
  2.     u.id,
  3.     u.empresa,
  4.     u.mail,
  5.     u.url,
  6.     u.telefono,
  7.     u.zona,
  8.     u.nivel,
  9.     SUM(IF(m.eliminado = 0, 1, 0)) Machines
  10. FROM m_usuarios u LEFT JOIN m_maquinas m ON m.id_dis = u.id
  11. WHERE u.eliminado =0
  12. GROUP BY u.id
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #3 (permalink)  
Antiguo 05/02/2014, 16:54
Avatar de lambar  
Fecha de Ingreso: marzo-2005
Ubicación: Murcia Fumeta
Mensajes: 55
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Problema con Count y un largo select

Y yo dandole vueltas al Count... ya me vale xD un gúgol de gracias!
  #4 (permalink)  
Antiguo 09/02/2014, 12:52
 
Fecha de Ingreso: diciembre-2005
Mensajes: 65
Antigüedad: 19 años
Puntos: 4
Respuesta: Problema con Count y un largo select

Código MySQL:
Ver original
  1. SELECT u.id, u.empresa, u.mail, u.url, u.telefono, u.zona, u.nivel, COUNT( DISTINCT m.id ) AS Machines
  2.     FROM m_usuarios u
  3.     LEFT JOIN m_maquinas m ON m.id_dis = u.id
  4.     WHERE u.eliminado =0 and m.eliminado=0
  5.     GROUP BY u.id


Última edición por gnzsoloyo; 09/02/2014 a las 13:05
  #5 (permalink)  
Antiguo 09/02/2014, 13:07
Avatar de gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 17 años
Puntos: 2658
Respuesta: Problema con Count y un largo select

Innecesariamente complicado.
Además, poner subconsultas en el SELECT es una muy mala práctica, por cuanto esa subconsulta se ejecuta una vez por cada valor devuelto en la consulta principal. En otras palabras, son asesinas de performance.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #6 (permalink)  
Antiguo 02/03/2014, 12:54
Avatar de lambar  
Fecha de Ingreso: marzo-2005
Ubicación: Murcia Fumeta
Mensajes: 55
Antigüedad: 19 años, 9 meses
Puntos: 0
Respuesta: Problema con Count y un largo select

Cita:
Iniciado por piwy Ver Mensaje
Código MySQL:
Ver original
  1. SELECT u.id, u.empresa, u.mail, u.url, u.telefono, u.zona, u.nivel, COUNT( DISTINCT m.id ) AS Machines
  2.     FROM m_usuarios u
  3.     LEFT JOIN m_maquinas m ON m.id_dis = u.id
  4.     WHERE u.eliminado =0 and m.eliminado=0
  5.     GROUP BY u.id

Eso es lo primero que probé pero el resultado no era el deseado, por varios motivos ahora no recuerdo cuales, era por que cuando algún usuario no tenia maquinas el valor no era correcto o algo así, no me acuerdo.

Y gnzsoloyo, aún me faltan muchas cosas por saber de mysql, esto es para la administración y nunca va a trabajar con miles de resultados, la página carga bien y no se una manera de hacerlo mas sencillo, seguro la hay, pero aún soy pro. xD

Etiquetas: campo, count, join, largo, select, tabla, usuarios
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 17:25.