Foros del Web » Programando para Internet » PHP »

Consulta a Mysql segun datos de un array

Estas en el tema de Consulta a Mysql segun datos de un array en el foro de PHP en Foros del Web. no se como lograr una consulta dependiento del contendio de un array. me explico tengo dos tablas. una llamada granjas y la otra llamada partos. ...
  #1 (permalink)  
Antiguo 18/10/2013, 19:44
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 19 años, 4 meses
Puntos: 0
Pregunta Consulta a Mysql segun datos de un array

no se como lograr una consulta dependiento del contendio de un array. me explico tengo dos tablas. una llamada granjas y la otra llamada partos. estas se encuentran relacionadas por un campo que se llama site_id, que es el identificador de la granja
el contendido de las tablas seria mas o menos asi.


Código:
id -  granja_nombre - site_id - granja_tipo 
1  -  San Jorge         -   20    -       2 
2  -  San Agustin         -    21   -    3
3  -  Persamo           -   22    -        2

y la otra tabla esta compuesta mas o menos asi

Código:
id    site_id    vivos   muertos   momificados     peso        evento   
1      20            13         0               1                  9.99          2012-09-29
1      21            17         0               0                  11.99          2013-09-29
1      22            18         0               0                  12          2011-09-29
1      20            11         1               2                  8          2010-09-29
1      22            9           2               0                  9.99          2011-09-29
1      22            10         0               1                  14          2013-09-29

es mas o menos un ejemplo entonces ocupo realizar una consulta como esta

Código PHP:
SELECT *,avg(vivos) as nacvivo,WEEKOFYEAR(evento) as sem FROM `partosWHERE site_id=20 and YEAR(evento)=2013 order by evento Asc 
con esa consulta intento llenar otra tabla que mas o menos deberia de llenarse asi

Código:
id  site_id     nacprom   semana anio
1   20               12.3          1         2013
2   20                11.8         2          2013
3   21                12.6         1        2013
4   22                 11.2       1         2013

no se si me explico la idea es cambiar lo que esta en WHERE site_id=20 por un arreglo tipo where array[site_id] y que con una solo consulta con un while se me llene por cada semana la tercera tabla si son 52 semanas en el año la tabla deberia de tener por cada site_id el promedio de nacidos vivos por cada semana del año.

espero puedan ayudarme ya que no se como expresar eso... y sobre todo si se puede cambiar el where por el contenido de un arreglo muchas gracias de antemano.
  #2 (permalink)  
Antiguo 18/10/2013, 20:38
 
Fecha de Ingreso: junio-2013
Ubicación: En cualquier parte de mi casa
Mensajes: 139
Antigüedad: 11 años, 5 meses
Puntos: 14
Respuesta: Consulta a Mysql segun datos de un array

Lo que buscas es IN() de mysql el cual los parametros debes pasarselos separados por "," coma
en el manual del PHP hay este ejemplo sobre la funcion implode() "La cual te ayudara a separar por , los datos dentro de un array"

Ejemplo:
Código PHP:
Ver original
  1. $array = array('apellido', 'email', 'teléfono');
  2. $separado_por_comas = implode(",", $array);

la consulta te quedaría algo como WHERE site_id IN(".$separado_por_comas.") la consulta te devolvera todos los datos donde site_id este dentro de lo establecido en la funcion IN()
  #3 (permalink)  
Antiguo 20/10/2013, 15:32
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Consulta a Mysql segun datos de un array

Y como quedaria la consulta perdona pero soy novato, me surge muchas dudas ya que lo que intento seria llenar la tabla por cada site_id y revisando cada una de las fechas en el campo de fecha del evento y calcular el promedio de nacidis por cada semana... ufff gracias x contestar
  #4 (permalink)  
Antiguo 20/10/2013, 17:53
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Consulta a Mysql segun datos de un array

Y como quedaria la consulta perdona pero soy novato, me surge muchas dudas ya que lo que intento seria llenar la tabla por cada site_id y revisando cada una de las fechas en el campo de fecha del evento y calcular el promedio de nacidis por cada semana... ufff gracias x contestar
  #5 (permalink)  
Antiguo 20/10/2013, 18:14
Avatar de xSkArx  
Fecha de Ingreso: marzo-2008
Ubicación: Chile
Mensajes: 945
Antigüedad: 16 años, 8 meses
Puntos: 96
Respuesta: Consulta a Mysql segun datos de un array

No hagas doble post, deberias leer bien lo que posteo edward1994
__________________
Busca, lee y practica todo lo que puedas.
Usa siempre el buscador antes de postear.
Si posteas código, utiliza el HIGHLIGHT correcto.
  #6 (permalink)  
Antiguo 21/10/2013, 18:43
 
Fecha de Ingreso: julio-2005
Mensajes: 73
Antigüedad: 19 años, 4 meses
Puntos: 0
Respuesta: Consulta a Mysql segun datos de un array

Cita:
Iniciado por edward1994 Ver Mensaje
Lo que buscas es IN() de mysql el cual los parametros debes pasarselos separados por "," coma
en el manual del PHP hay este ejemplo sobre la funcion implode() "La cual te ayudara a separar por , los datos dentro de un array"

Ejemplo:
Código PHP:
Ver original
  1. $array = array('apellido', 'email', 'teléfono');
  2. $separado_por_comas = implode(",", $array);

la consulta te quedaría algo como WHERE site_id IN(".$separado_por_comas.") la consulta te devolvera todos los datos donde site_id este dentro de lo establecido en la funcion IN()
Muchas gracias por tu respuesta la verdad me despejo muchas dudas pero como suele suceder abre otras. mi consulta queda mas o menos asi.

[PHP]SELECT *
FROM `partos_server`
WHERE YEAR( evento ) =2013
AND site_id
IN ( 20, 21, 22, 23, 24, 25, 26, 28, 31 )
AND WEEKOFYEAR( evento )
IN ( 1, 2, 3 ) [/CODE]

te digo mas o menos porque lo hice con un array aqui solo muestro los datos. ahora la duda que tengo es que por cada site_id me calcule el promedio de nacidos vivos del sitio 20 de la semana 1 y que mi tabla quede asi

Código:
site_id    promedio      semana
20             12.4                1
20             11.8                2
20             10.5                n
21             14.2                1
y asi sucesivamente, problema es que cuando pongo AVG(VIVOS) en la consulta.. este solo me arroja una fila para el site_id=22
quedando asi

Código:
Sitio	prom Nacido	Fecha	Semana
22	11.4522	2013-01-02	1

espero puedas ayudarme.... y por el post repetido una disculpa me fallo el internet.

este es mi codigo completo

Código PHP:
$sql mysql_query("SELECT site_id FROM granjas");
  while( 
$row mysql_fetch_array$sql) ) {
    
$array[] = $row['site_id']; 
    
    }
    
$granjas implode(","$array);
   echo 
"<table>"//EMPIEZA A CREAR LA TABLA CON LOS ENCABEZADOS DE TABLA
   
echo "<tr>";//<tr> CREA UNA NUEVA FILA
   
echo "<td>Sitio</td>";//<td> CREA NUEVA COLUMNA
   
echo "<td>prom Nacido</td>";
   echo 
"<td>Fecha</td>";
   echo 
"<td>Semana</td>";
   echo 
"</tr>"
   
$i=0
$query mysql_query("SELECT *,avg(vivos) as nacvivo, WEEKOFYEAR(evento) as sem FROM `partos_server` WHERE site_id IN(
           "
.$granjas.") and YEAR(evento)=2013 and  WEEKOFYEAR(evento)=1 order by evento Asc") or die("Error en Consulta.- ".mysql_error());
$reg mysql_fetch_array($queryMYSQL_BOTH);//LA VARIABLE $REG GUARDA LOS REGISTROS DE LA CONSULTA REALIZADA
do {
    
$i++;
echo 
"<tr>";
echo 
"<td>".$reg['site_id']."</td>";//EN CADA CELDA SE COLOCA EL CONTENIDO DE REG
echo "<td>".$reg['nacvivo']."</td>";
echo 
"<td>".$reg['sem']."</td>";
echo 
"<td>".$i."</td>";
$reg mysql_fetch_array($queryMYSQL_BOTH);
echo 
"</tr>";
}while(
$reg);
echo 
"</table>";//FINALIZA LA TABLA 

Última edición por bendark23; 21/10/2013 a las 18:57

Etiquetas: php+mysql
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 14:06.