Bonjour à tous,
Je travaille sur une base de donnée qui a 9 tables différentes. La plus part sont liées esembles.
Voici le schéma:
Actuellement, je questionne la table 'stations' et je souhaite extraire toutes les collections de mesures liées à cette station (qui contient plusieurs capteurs). Plus tard, je souhaite filtrer les mesures en fonction du capteur.
Pour le moment, je souhaite lister toutes les mesures liés à cette station.
Ma requêtes SQL est la suivante:
Je ne sais pas si mes jointures sont bien fâites, mais elle semble ben fonctionner. Sauf que pour les tables qui ont le nom de champs, il me l'affiche qu'une fois.
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
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 $sql_select = 'SELECT * FROM stations AS st LEFT JOIN sensors AS se ON st.id_station = se.stations_id_station LEFT JOIN sensor_types AS stype ON se.sensor_types_id_sensor_type = stype.id_sensor_type LEFT JOIN measures AS m ON se.id_sensor = m.sensors_id_sensor LEFT JOIN collections AS c ON m.collections_id_collection = c.id_collection WHERE st.id_station = '.$station.' AND c.date >= "'.$from.'" AND c.date <= "'.$to.'" ORDER BY c.id_collection, c.date ASC'; $sql_result = $connect->query($sql_select); echo "<h1>".$sql_result->num_rows." measures</h1>"; //print_r($sql_result); //$row = $sql_result->fetch_assoc(); //print_r($row); echo "<ul>"; while($row = $sql_result->fetch_assoc()){ echo "<li>"; print_r($row); echo "</li>"; echo "<li><b>Station ID: ".$row['id_station']." Sensor ID: ".$row['id_sensor']."</b></li>"; echo "<li> Collection ID: ".$row['collections_id_collection']."</li>"; $collections[$row['collections_id_collection']]['pond']="pondx(station)"; $collections[$row['collections_id_collection']]['collection']="pondx(station)"; $collections[$row['collections_id_collection']]['Time']=$row['date']; $collections[$row['collections_id_collection']]['wl']=$row['value']; $collections[$row['collections_id_collection']]['wln']=$row['date']; //echo "<li> Collection date: ".$row['date']."</li>"; echo "<li>Sensor Name: ".$row['longname']." (".$row['name'].")</li>"; echo "<li>Sensor Value: ".$row['value']."</li>"; echo "<li><hr></li>"; echo "<li>"; print_r($collections); echo "</li>"; echo "<li><hr></li>"; } echo "</ul>";
Par exempel si vous regarder ma table 'stations','sensors' et 'sensor_type' elle a un champs 'name'.
le
me retourne
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 print_r($row);
Alors que si je renome mon champs 'name' en 'names' de ma table 'sensors', il m'affiche ceciArray ( [id_station] => 1 [fields_id_field] => 1 [name] => wl [longname] => Waterlevel [lat] => [lng] => [alt] => [installed] => 2018-02-13 00:00:00 [description] => [created] => 2018-02-26 12:57:58 [id_sensor] => 1 [stations_id_station] => 1 [sensor_types_id_sensor_type] => 1 [id_sensor_type] => 1 [sensor_families_id_sensor_family] => 1 [mesure_unit] => m [id_measure] => 1 [sensors_id_sensor] => 1 [collections_id_collection] => 1 [value] => 822.8850 [id_collection] => 1 [collectionid] => 1 [date] => 2017-10-17 00:00:00 )
Je pourrais alors donner des noms de champ unique dans toutes mes tables, mais je ne pense pas que c'est la solution idée.Array ( [id_station] => 1 [fields_id_field] => 1 [names] => pond7A [longname] => Waterlevel [lat] => [lng] => [alt] => [installed] => 2018-02-13 00:00:00 [description] => [created] => 2018-02-26 12:57:58 [id_sensor] => 1 [stations_id_station] => 1 [sensor_types_id_sensor_type] => 1 [name] => wl [id_sensor_type] => 1 [sensor_families_id_sensor_family] => 1 [mesure_unit] => m [id_measure] => 1 [sensors_id_sensor] => 1 [collections_id_collection] => 1 [value] => 822.8850 [id_collection] => 1 [collectionid] => 1 [date] => 2017-10-17 00:00:00 )
Il doit bien àa voir une solution au niveau MySQL, non?
Merci pour vos lumières
Partager