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:
Nom : Screen Shot 2018-02-26 at 5.00.35 PM.png
Affichages : 1288
Taille : 188,1 Ko

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:
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>";
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.

Par exempel si vous regarder ma table 'stations','sensors' et 'sensor_type' elle a un champs 'name'.
le
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
 
print_r($row);
me retourne
Array ( [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 )
Alors que si je renome mon champs 'name' en 'names' de ma table 'sensors', il m'affiche ceci

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 )
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.

Il doit bien àa voir une solution au niveau MySQL, non?

Merci pour vos lumières