Ver Mensaje Individual
  #5 (permalink)  
Antiguo 23/04/2010, 09:56
jurena
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Cáceres
Mensajes: 3.735
Antigüedad: 16 años, 5 meses
Puntos: 300
Respuesta: Consulta SQL con porcentajes

Lo primero que debes controlar es la fórmula matemática.
Un 20% de un 40% es 8% del total (se saca multiplicando los porcentajes y dividiendo por 100)
Un 80% de un 40% es 32% del total
Un 20% de un 60% es un 12% del total
Un 80% de un 60% es un 48% del total
Tendrías que saber el total, el XX, y aplicar los porcentajes, en tu caso con PHP, sobre ese número y cargarlos en variables. Eso lo puedes hacer fácilmente con variables PHP, que luego incluirás en los LIMIT de las consultas. Buscas que sean encontrados al azar, imagino (tendrás que usar ORDER BY RAND, aunque habría que alguna otra solución que realmente fuese más azarosa). Yo la consulta la haría con UNION ALL del siguiente modo (entiendo cun camponac. que puede ser extranjero, E, o nacional, N), aunque también podrías hacer por separado la consulta y luego reunir los datos en un array.
Código MySQL:
Ver original
  1. (SELECT campo1, campo2, campo3  FROM mitabla
  2.  WHERE sexo = 'F' AND camponac='E'
  3.  ORDER BY RAND LIMIT 0,variable8porcientosobreXX)
  4. (SELECT campo1, campo2, campo3  FROM mitabla
  5.  WHERE sexo = 'F' AND camponac='N'
  6.  ORDER BY RAND LIMIT 0,variable32porcientosobreXX)
  7. (SELECT campo1, campo2, campo3  FROM mitabla
  8.  WHERE sexo = 'M' AND camponac='E'
  9.  ORDER BY RAND LIMIT 0,variable12porcientosobreXX)
  10. (SELECT campo1, campo2, campo3  FROM mitabla
  11.  WHERE sexo = 'M' AND camponac='N'
  12.  ORDER BY RAND LIMIT 0,variable48porcientosobreXX)

Esta es la idea. Los números deben cuadrar, es decir, el XX, debe permitir sacar esos porcentajes. No siempre es posible la exactitud en este tipo de datos. No podemos sacar decimales, es decir, dividir a los individuos. ¿Y qué ocurriría si de un tipo de los buscados no hay suficientes para hacer esa parte del porcentaje? Tendrías que controlar las cantidades devueltas por las consultas para ajustar o avisar.

Última edición por jurena; 23/04/2010 a las 10:19