Bonjour à tous
J'ai une grosse requete avec plein de jointure qui fonctionne très bien
ceci m'affiche ( je ne mets pas tous, car il y en a 16
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
45 $sql_select ='SELECT fi.field_name, st.id_station, st.station_name, st.station_longname, se.sensor_name, se.sensor_longname, se.chart_pointStyle_id_chart_pointStyle, se.chart_pointRadius, se.chart_fill, se.chart_showLine, se.chart_borderWidth, se.chart_pointHoverRadius, se.id_sensor, stype.measure_unit, stype.id_sensor_type, stype.sensor_type_name,m.value, c.id_collection,c.ttn_m_time, cs.chart_style_value, cp.chart_pointStyle_value, col_bg.color_name as bg_color,col_bg.color_value as bg_color_value, col_bd.color_name as bd_color,col_bd.color_value as bd_color_value FROM fields AS fi INNER JOIN stations AS st ON fi.id_field = st.fields_id_field 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 INNER JOIN chart_backgroundColor AS cbgc on cbgc.id_chart_backgroundColor=se.chart_backgroundColor_id_chart_backgroundColor INNER JOIN colors AS col_bg on cbgc.colors_id_colors=col_bg.id_colors INNER JOIN chart_borderColor AS cbdc on cbdc.id_chart_borderColor=se.chart_borderColor_id_chart_borderColor INNER JOIN colors AS col_bd on cbdc.colors_id_colors=col_bd.id_colors INNER JOIN chart_style AS cs on se.chart_style_id_chart_style = cs.id_chart_style INNER JOIN chart_pointStyle AS cp on se.chart_pointStyle_id_chart_pointStyle = cp.id_chart_pointStyle WHERE fi.id_field = '.$field.' AND se.sensor_active = 1 AND st.station_active = 1 '.$clauseAND2.' ORDER BY c.ttn_m_time, se.sensor_longname, c.id_collection ASC'; $sql_result = $connect->query($sql_select); if($debug==true) { if($sql_result->num_rows>0){ $j=0; // Collect the time of measures and the id of the two sensors while($row = $sql_result->fetch_assoc()) { echo '<pre>'; echo print_r($row); echo '</pre>'; $j++; } } $sql_result->data_seek(0); echo "<hr>"; }
Le problème est qu'il va m'afficher les que si une station dont ses capteurs ont des mesures enregitrées dans la base de donnéeArray
(
[field_name] => hutins
[id_station] => 1
[station_name] => st-1
[station_longname] => Station 1
[sensor_name] => b1
[sensor_longname] => Température bas
[chart_pointStyle_id_chart_pointStyle] => 1
[chart_pointRadius] => 1
[chart_fill] => 0
[chart_showLine] => 1
[chart_borderWidth] => 1
[chart_pointHoverRadius] => 13
[id_sensor] => 1
[measure_unit] => C
[id_sensor_type] => 2
[sensor_type_name] => te
[value] => 18.0000
[id_collection] => 50
[ttn_m_time] => 2020-11-05 00:50:06
[chart_style_value] => line
[chart_pointStyle_value] => triangle
[bg_color] => Red
[bg_color_value] => 255, 99, 132
[bd_color] => Red
[bd_color_value] => 255, 99, 132
)
1
Array
(
[field_name] => hutins
[id_station] => 1
[station_name] => st-1
[station_longname] => Station 1
[sensor_name] => b4
[sensor_longname] => Température haut
[chart_pointStyle_id_chart_pointStyle] => 4
[chart_pointRadius] => 1
[chart_fill] => 0
[chart_showLine] => 1
[chart_borderWidth] => 1
[chart_pointHoverRadius] => 13
[id_sensor] => 4
[measure_unit] => C
[id_sensor_type] => 2
[sensor_type_name] => te
[value] => 18.0000
[id_collection] => 50
[ttn_m_time] => 2020-11-05 00:50:06
[chart_style_value] => line
[chart_pointStyle_value] => cicle
[bg_color] => Turquoise
[bg_color_value] => 75, 192, 192
[bd_color] => Turquoise
[bd_color_value] => 75, 192, 192
)
1
J'aimerais modifier ceci de manière que l'ID (st.id_station) soit aussi listé. J'ai 6 stations actifs pour le field qui a l'id 2 (fi.id_field) et trois stations ont des mesures.INNER JOIN stations AS st ON fi.id_field = st.fields_id_field
J'aimerias que toutes les stations actives soient aussi listée même si il n'y a pas encore de capteurs enregistrés et associés aux stations qui ne sont pas (encore) listée
Par exemple
Ou s'il y a des capteurs associées mais pas encore de mesures, ceci devrait ressemblé à ceci (sans [value] => 18.0000)Array
(
[field_name] => hutins
[id_station] => 5
[station_name] => st-5
[station_longname] => Station 5
)
J'ai essayé de modifier ceciArray
(
[field_name] => hutins
[id_station] => 1
[station_name] => st-1
[station_longname] => Station 1
[sensor_name] => b4
[sensor_longname] => Température haut
[chart_pointStyle_id_chart_pointStyle] => 4
[chart_pointRadius] => 1
[chart_fill] => 0
[chart_showLine] => 1
[chart_borderWidth] => 1
[chart_pointHoverRadius] => 13
[id_sensor] => 4
[measure_unit] => C
[id_sensor_type] => 2
[sensor_type_name] => te
[id_collection] => 50
[ttn_m_time] => 2020-11-05 00:50:06
[chart_style_value] => line
[chart_pointStyle_value] => cicle
[bg_color] => Turquoise
[bg_color_value] => 75, 192, 192
[bd_color] => Turquoise
[bd_color_value] => 75, 192, 192
)
sans succès.
Code : Sélectionner tout - Visualiser dans une fenêtre à part RIGHT JOIN stations AS st ON fi.id_field = st.fields_id_field
Dans l'alternative, je me demande si je ne devrais pas faire une autre requête qui va uniqument listé les stations su du genre
Code PHP : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 $sql_select ='SELECT st.id_station FROM stations AS st WHERE st.station_active = 1 ORDER BY st.id_station ASC'; $sql_result = $connect->query($sql_select);
Puis fusionner les résultats dans la construction de mon array que je vais devoir exploiter
La seconde alternatice me semble bien plus simple à appliquer, mais si je peux tout faire dans la meme requete, ca serait aussi bien
Partager