Ver Mensaje Individual
  #3 (permalink)  
Antiguo 12/03/2009, 04:24
Avatar de gnzsoloyo
gnzsoloyo
Moderador criollo
 
Fecha de Ingreso: noviembre-2007
Ubicación: Actualmente en Buenos Aires (el enemigo ancestral)
Mensajes: 23.324
Antigüedad: 16 años, 5 meses
Puntos: 2658
Respuesta: error en php y mysql

Esto es lo que has posteado:
Código sql:
Ver original
  1. SELECT
  2.   *,
  3.   IFNULL((temp.total*temp.porcentaje/100),0) AS cant_descuento,
  4.   (temp.total - IFNULL((temp.total*temp.porcentaje/100),0)) AS importe
  5. FROM
  6.   (SELECT
  7.     recibos_a.id_reciboa,
  8.     recibos_a.id_clinica,
  9.     recibos_a.folio,
  10.     recibos_a.activo,
  11.     clinicas.prefijo,
  12.     UNIX_TIMESTAMP(recibos_a.fecha) AS fecha,
  13.     pacientes.nombre_paciente,
  14.     pacientes.apellidos_paci ente,
  15.     operadores.nombre_operador,
  16.     operadores.apellidos AS apellidos_operador,
  17.     materias.nombre_materia,
  18.     recibos_a.id_usuario,
  19.     descuentos.nombre_descuento,
  20.     recibos_a.porcentaje,
  21.     usuarios.nombre_usuario,
  22.     (SELECT
  23.       SUM(detallado_a.cantidad * detallado_a.precio_unitario) AS suma
  24.     FROM detallado_a
  25.     GROUP BY detallado_a.id_reciboa
  26.     HAVING detallado_a.id_reciboa = recibos_a.id_reciboa)AS total
  27.   FROM recibos_a LEFT JOIN usuarios ON recibos_a.autorizo = usuarios.id_usuario
  28.     INNER JOIN clinicas ON recibos_a.id_clinica = clinicas.id_clinica
  29.     INNER JOIN pacientes ON recibos_a.id_paciente = pacientes.id_paciente
  30.     INNER JOIN operadores ON recibos_a.id_operador = operadores.id_operador
  31.     INNER JOIN materias ON recibos_a.id_materia = materias.id_materia
  32.     LEFT JOIN descuentos ON recibos_a.id_descuento = descuentos.id_descuento) AS temp
  33.   WHERE fecha > 1236751200 AND fecha < 1236834000 AND id_clinica = 1 AND id_usuario = 10;
A primera vista tiene tres problemas:
1) el campo pacientes.apellidos_paci ente tiene un espacio intermedio entre la i y la e. Eso pued ecausar problemas.
2) El FROM exterior no está cerrado y como tabla derivada, no tiene el alias que le corresponde.
3) Un problema final que yo puedo prever es que existen demasiados INNER JOIN y LEFT JOIN definidos para la misma subconsulta. Eso puede tornarla ineficiente. Deberías estudiar si puedes hacer grupos de subconsultas que luego se relacionen. De esa forma vas depurando por niveles de selectividad y no cruzando todo con todo, sino lo que realmente se relaciona.
Puede mejorar la performance de la consulta...
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)

Última edición por gnzsoloyo; 12/03/2009 a las 04:30