Foros del Web » Programando para Internet » PHP »

[SOLUCIONADO] Consulta en mysql con php

Estas en el tema de Consulta en mysql con php en el foro de PHP en Foros del Web. Tengo que hacer una consulta utilizando datos de 3 tablas distintas pero no lo consigo, quizás alguien me pueda echar una mano. Las tablas son: ...
  #1 (permalink)  
Antiguo 19/06/2014, 02:42
 
Fecha de Ingreso: junio-2014
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Consulta en mysql con php

Tengo que hacer una consulta utilizando datos de 3 tablas distintas pero no lo consigo, quizás alguien me pueda echar una mano.

Las tablas son:

Tabla1: instalaciones

id
id_tinst
id_cliente
anio
direccion
localidad
cp
provincia
nombre


Tabla2: contadores

id
id_instalacion
id_tcontador
id_impex
notas
coeficiente
numserie


Tabla3: lecturas

id
id_contador
fecha
lectura


Lo que quiero listar la dirección de las instalaciones cuyos contadores no tengan lectura en un rango de fechas determinado.

Muchas gracias.
  #2 (permalink)  
Antiguo 19/06/2014, 05:45
Colaborador
 
Fecha de Ingreso: marzo-2008
Ubicación: Sabadell
Mensajes: 4.897
Antigüedad: 16 años, 1 mes
Puntos: 574
Respuesta: Consulta en mysql con php

La pregunta es para el foro de MySql.

Pero has intentado algo?

Piensa en negativo, selecciona los que si tienen lectura y luego pide los no esten ahí.
__________________
Quim
--------------------------------------------------
Ayudar a ayudar es una buena práctica!!! Y da buenos resultados.
  #3 (permalink)  
Antiguo 19/06/2014, 08:56
 
Fecha de Ingreso: junio-2014
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Consulta en mysql con php

Gracias por tu respuesta.

He estado probando con algo así:

Código PHP:
    $fecha_actual date("Y-m-d");
    
$busqueda"select distinct id_contador from lecturas where fecha>2014-05-15";
    
$result mysql_query($busqueda);
     
    while(
$row1 mysql_fetch_assoc($result)){
    
$var=$row1['id_contador'];
    
$busqueda2"select distinct id_inst from contadores where id=$var";
    
$result2 mysql_query($busqueda2);
    while(
$row2 mysql_fetch_assoc($result2)){
    
$var2=$row2['id_inst'];
    
$busqueda3"select distinct direccion from instalaciones where id=$var2";
    
$result3 mysql_query($busqueda3);
    while(
$row3 mysql_fetch_array($result3)){
    echo 
$row3['direccion']."</br>";
    }
    }
    } 
El problema es que como una instalación (dirección) puede tener asociado más de un contador, esto me lista una misma dirección muchas veces repetida. No veo como hacer que sólo me liste una vez cada dirección igual.
  #4 (permalink)  
Antiguo 19/06/2014, 10:51
 
Fecha de Ingreso: junio-2014
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Consulta en mysql con php

Intento meter en un array el resultado para después borrar los duplicados, pero
sólo me sale la palabra Array.

Código PHP:
    $fecha_actual date("Y-m-d");
    
$busqueda"select distinct id_contador from lecturas where fecha>2014-05-15";
    
$result mysql_query($busqueda);
     
$array=array();
    while(
$row1 mysql_fetch_assoc($result)){
    
$var=$row1['id_contador'];
    
$busqueda2"select distinct id_inst from contadores where id=$var";
    
$result2 mysql_query($busqueda2);
    while(
$row2 mysql_fetch_assoc($result2)){
    
$var2=$row2['id_inst'];
    
$busqueda3"select distinct direccion from instalaciones where id=$var2";
    
$result3 mysql_query($busqueda3);
    while(
$row3 mysql_fetch_array($result3)){
    
$array[] = $row3;
    
    
//printf("DIRECCION: %s" , $row3[0]);     
     //echo "</br>";
    
}
    }
    }    

$array_valores_unicos array_unique($array);
    foreach(
$array_valores_unicos as $value
    echo 
$value "<br/>"
  #5 (permalink)  
Antiguo 19/06/2014, 10:54
Avatar de hhs
hhs
Colaborador
 
Fecha de Ingreso: junio-2013
Ubicación: México
Mensajes: 2.995
Antigüedad: 10 años, 9 meses
Puntos: 379
Respuesta: Consulta en mysql con php

Tu problema es de SQL, necesitas ir al foro correspondiente para que te ayuden
__________________
Saludos
About me
Laraveles
A class should have only one reason to change.
  #6 (permalink)  
Antiguo 19/06/2014, 10:56
 
Fecha de Ingreso: abril-2002
Mensajes: 33
Antigüedad: 22 años
Puntos: 0
Respuesta: Consulta en mysql con php

Empieza mirando esto, podrás hacer la query de una vez, no sabría ni por donde empezar en lo que planteas, aunque todos los caminos llevan a roma.

http://donnierock.com/2014/03/04/diferencia-entre-inner-join-left-join-y-right-join-sql/
__________________
Sergio Sánchez
www.sergio.es
  #7 (permalink)  
Antiguo 19/06/2014, 11:08
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Consulta en mysql con php

Vamos al punto de una consulta a tres tablas. Eso se escribe simplement easí:
Código SQL:
Ver original
  1. SELECT * FROM lecturas L
  2.     INNER JOIN contadores C ON L.id_contador = C.id
  3.     INNER JOIN instalaciones i ON C.id_inst = i.id
  4. WHERE L.fecha>'2014-05-15'
Quiero hacerte notar, antes que nada, que no es correcto poner algo como.
Código SQL:
Ver original
  1. fecha>2014-05-15
porque la fecha expresada de ese modo en realidad es una operación aritmética de resta (2014-05--15 = 1994). Para que MySQL tome contextualmente la fecha como fecha, debe ser una cadena de texto, o bien aplicar una cunción de conversión:
Código SQL:
Ver original
  1. fecha>'2014-05-15'
Código SQL:
Ver original
  1. fecha>DATE('2014-05-15')

Ahora bien, respecto a que no te salgan repetidos algunos de los datos (desde la primera a la ultima tabla), eso es inevitable desde el punto de vista de SQL.
La base de datos sólo puede devolver datos que se relacionan, y por tanto devolverá los datos en función de la cardinalidad de la relación. Si la relación entre la primera tabla y la segunda es de 1:10, devolverá 10 veces los datos de la primera relacionados con cada uno de los de la segunda que sean diferentes entre sí.
Obviamente, si la relación entre la segunda y tercera no es 1:1, el resultado se multiplicará.
Lo que quiero que entiendas es que eso NO ES UN EROR. Es el comportamiento normal y esperado de una consulta a una base de datos.
Si tu problema es cómo hacer para mostrar ese resultado sin repetir los datos que son iguales trne dos registros, bueno, para eso se usa el ingenio, y se programa el script...
¿Cómo?
Mostrando en cada línea de la tabla en pantalla los datos de cada valor del array sólo cuando cambie su valor respecto al array del ciclo anterior.
No hay mucho más secreto que ese. Eso se llama PROGRAMAR, y la lógica de ese caso es siempre más o menos la misma.
__________________
¿A quién le enseñan sus aciertos?, si yo aprendo de mis errores constantemente...
"El problema es la interfase silla-teclado." (Gillermo Luque)
  #8 (permalink)  
Antiguo 19/06/2014, 11:18
 
Fecha de Ingreso: junio-2014
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Consulta en mysql con php

Muchas gracias gnzsoloyo.

El tema a la consulta a la base de datos a groso modo está resuelto. El problema de la duplicidad de los registros que se muestran creí que lo podía resolver con array_unique, pero supongo que hay un error de concepto...

Buscaré mi ingenio a ver donde anda... jeje
  #9 (permalink)  
Antiguo 19/06/2014, 11:49
Avatar de 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, 4 meses
Puntos: 2658
Respuesta: Consulta en mysql con php

Para mostrar sólo una vez cada valor que se repita entre dos registros, la idea es almacenar el valor de los datos de cada registro en cada ciclo, y compararlos con los del siguiente.
Si en el siguiente son iguales, no los muestras, si son diferentes los muestras y reemplazas los anteriores por los nuevos valores.
Es un método iterativo, bastante simple.

El algoritmo sería mas o menos:
1) Lees la tabla.
2) Por cada registro devuelto:
2.1) Si es el primero, copiar los datos clave a variables, y mostrar los del registro.
2.2) Si no es el primero, comparar los datos que peuden repetirse con los anteriores.
2.3) Si son iguales a los anteriores, mostrar los restantes datos (no repetibles), y proseguir.
2.4) Si son diferntes, mostrar los datos del registro nuevo y luego refrescasr con ellos las variables
3) Repetir el ciclo hasta recorrer todo el resultado.

Si se da que existe más de un nivel de repeticiones posible (subttoales o subtemas) dentro de un ciclo mayor, se debe hacer más de un nivel de comparaciones.

¿Se entiende?
__________________
¿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; 19/06/2014 a las 12:06
  #10 (permalink)  
Antiguo 19/06/2014, 12:10
 
Fecha de Ingreso: junio-2014
Mensajes: 5
Antigüedad: 9 años, 10 meses
Puntos: 0
Respuesta: Consulta en mysql con php

Aunque rudimentario, lo he conseguido...

Código PHP:

$num_array
=count($array);

for (
$i=0;$i<$num_array;$i++){
    
$var=$array[$i][0];
    
$var_prev=$array[$i-1][0];
    if (
$var != $var_prev){
    echo 
$var."</br>";
    }} 


Muchas gracias

Etiquetas: fecha, mysql, tabla
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 23:05.