IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Afficher les mesures selon le dernier enregistrement d'une table jointe


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut Afficher les mesures selon le dernier enregistrement d'une table jointe
    Bonjour,

    Ouha, je suis en plein dans le jointure

    Synthèse:
    J'ai plusieurs stations qui ont 1 à 5 capteurs. Toutes les x heures, la station prendre les mesures de tous ses capteurs. Ce que j'appelle une collection. Soit une collection de mesures

    Je sauve dans ma table collections, une collection qui contint

    * L'ID de la collection
    * l'heures
    * et d'autres information qui n'importe le sujet de ce post

    Dans ma table measures , je suave mes mesures. Cette table à une jointure sur la table collections et la table sensors qui elle a à une liaison avec la table stations

    Problème
    Je peux très facile extraire les données pour un capteur (sensors)
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    			$sql_measures ='SELECT st.id_station, m.value, c.ttn_m_time, se.id_sensor, c.id_collection FROM stations AS st
    			INNER JOIN sensors AS se ON st.id_station = se.stations_id_station
    			INNER JOIN sensor_types AS stype ON se.sensor_types_id_sensor_type = stype.id_sensor_type
    			INNER JOIN measures AS m ON se.id_sensor = m.sensors_id_sensor
    			INNER JOIN collections AS c ON m.collections_id_collection = c.id_collection
    			WHERE st.id_station = '.$collection['id_station'].'
    			ORDER BY c.ttn_m_time DESC';
     
    			$r_measures = $connect->query($sql_measures);
    			while($result_measures = $r_measures->fetch_assoc())
    			{
    				echo '<pre>';
    				print_r($result_measures);
    				echo '</pre>';
    			};
    et il va m'afficher toutes les mesures trouvées de tous les capteurs attachés à cette station.

    Le problème est que je en veux que les dernières mesures. Mais pas LA dernière mesure.

    Ci-dessus, le print_r m'affiche ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:51:46
        [id_sensor] => 1
        [id_collection] => 57
    )
     
    Array
    (
        [id_station] => 1
        [value] => 28.0000
        [ttn_m_time] => 2020-11-05 00:51:46
        [id_sensor] => 4
        [id_collection] => 57
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:51:30
        [id_sensor] => 1
        [id_collection] => 56
    )
     
    Array
    (
        [id_station] => 1
        [value] => 29.0000
        [ttn_m_time] => 2020-11-05 00:51:30
        [id_sensor] => 4
        [id_collection] => 56
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:51:14
        [id_sensor] => 1
        [id_collection] => 55
    )
     
    Array
    (
        [id_station] => 1
        [value] => 26.0000
        [ttn_m_time] => 2020-11-05 00:51:14
        [id_sensor] => 4
        [id_collection] => 55
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:58
        [id_sensor] => 1
        [id_collection] => 54
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:58
        [id_sensor] => 4
        [id_collection] => 54
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:42
        [id_sensor] => 1
        [id_collection] => 53
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:42
        [id_sensor] => 4
        [id_collection] => 53
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:26
        [id_sensor] => 1
        [id_collection] => 52
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:26
        [id_sensor] => 4
        [id_collection] => 52
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:13
        [id_sensor] => 1
        [id_collection] => 51
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:13
        [id_sensor] => 4
        [id_collection] => 51
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:06
        [id_sensor] => 4
        [id_collection] => 50
    )
     
    Array
    (
        [id_station] => 1
        [value] => 18.0000
        [ttn_m_time] => 2020-11-05 00:50:06
        [id_sensor] => 1
        [id_collection] => 50
    )
    J'aimerais que les mesures liés à la collection 57
    [id_collection] => 57
    Donc ceci ne fonctionne pas
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    $sql_measures ='SELECT st.id_station, m.value, c.ttn_m_time, se.id_sensor, c.id_collection FROM stations AS st
    			INNER JOIN sensors AS se ON st.id_station = se.stations_id_station
    			INNER JOIN sensor_types AS stype ON se.sensor_types_id_sensor_type = stype.id_sensor_type
    			INNER JOIN measures AS m ON se.id_sensor = m.sensors_id_sensor
    			INNER JOIN collections AS c ON m.collections_id_collection = c.id_collection
    			WHERE st.id_station = '.$collection['id_station'].'
    			ORDER BY c.ttn_m_time DESC LIMIT 1';
    car il va m'afficher la toute dernière mesure.

    MAIS j'aimerais affichier toutes les mesures des capteurs attaché à une station, de la dernière collection.

    Je pensais que ceci
    ORDER BY c.ttn_m_time DESC LIMIT 1';
    solutionnerait mon problème que je croyais que la limite s'appliquait à l'heure (ttn_m_time) qui appartient à une collection. Mais elas, le LIMIT s'applique bien à la dernière ligne extraite

    Je me demande donc comment je peux "appliquer" LIMIT 1, de manière à que seulement la dernière collection est considérée, et qu'en suite, j'exploite les mesures prise lors de la dernière collection pour une station.

    L'objectif est d'afficher sur ma home page, les dernières mesures pour chaque station.

    Merci beaucoup pour vos lumières!!!

  2. #2
    Membre expérimenté
    Profil pro
    Inscrit en
    Mai 2005
    Messages
    3 165
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 165
    Par défaut
    Je ne sais pas si je cherche toujours à faire compliqué.

    Peut-être que je pourrais faire une requete sur ma table collections
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    	$sql_collection ='SELECT c.id_collection, c.ttn_m_time FROM collections AS c
    			ORDER BY c.ttn_m_time DESC LIMIT 1';
    			$r_collection = $connect->query($sql_collection);
    			$result_collection = $r_collection->fetch_assoc();
     
    			echo '<pre>';
    			print_r($result_collection);
    			echo '</pre><hr>';
    Puis
    Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
     
    $sql_measures ='SELECT st.id_station, m.value, c.ttn_m_time, se.id_sensor, c.id_collection FROM stations AS st
    			INNER JOIN sensors AS se ON st.id_station = se.stations_id_station
    			INNER JOIN sensor_types AS stype ON se.sensor_types_id_sensor_type = stype.id_sensor_type
    			INNER JOIN measures AS m ON se.id_sensor = m.sensors_id_sensor
    			INNER JOIN collections AS c ON m.collections_id_collection = c.id_collection
    			WHERE st.id_station = '.$collection['id_station'].' AND c.id_collection = '.$result_collection['id_collectoon'].'
    			ORDER BY c.ttn_m_time DESC';
     
    			$r_measures = $connect->query($sql_measures);
    			while($result_measures = $r_measures->fetch_assoc())
    			{
    				echo '<pre>';
    				print_r($result_measures);
    				echo '</pre>';
    			};
    Mais ca me fait deux requêtes, fois le nombre de station, fois le nombre de capteurs attachés aux station.

    Est-ce qu'il n'y aurait pas une solution plus optimale?

Discussions similaires

  1. [AC-2003] Afficher les 100 derniers enregistrements d'une table
    Par Evolvana dans le forum VBA Access
    Réponses: 3
    Dernier message: 03/08/2011, 15h47
  2. Réponses: 5
    Dernier message: 22/03/2010, 01h19
  3. Comment récupérer les 2 derniers enregistrements d'une table?
    Par js8bleu dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 07/11/2009, 19h21
  4. Afficher le dernier enregistrement d'une table
    Par persia dans le forum Requêtes
    Réponses: 8
    Dernier message: 10/09/2008, 19h26
  5. comment rechercher les derniers enregistrement d'une table ?
    Par hornetboy dans le forum Langage SQL
    Réponses: 4
    Dernier message: 28/09/2005, 09h13

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo