Comment utiliser IN pour filtrer un champ
Bonjour à tous
Dans un précédent post, on m'a donné cette astuce que je ré-exploite ci-dessous
Code:
1 2
|
$and = " AND stype.sensor_type_name IN ( 1,2,3,4) "; |
pour comparer si des ID existent par enregistrement.
Actuellement, j'essaye de faire la même chose mais un peu différemment, car ce n'est pas des ID que je veux vérifier, mais le nom des types de capteurs. Soit des noms...
J'ai ceci qui va me retoruner les capteurs existants (ou enregistrés) pour une station. Il doit en avoir 12...
Code:
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
|
$sql_select = 'SELECT se.id_sensor, stype.sensor_type_name FROM stations AS sa
LEFT JOIN sensors AS se ON sa.id_station = se.stations_id_station
LEFT JOIN sensor_types AS stype ON se.sensor_types_id_sensor_type = stype.id_sensor_type
WHERE se.stations_id_station = "'.$station_id.'"
ORDER BY se.stations_id_station ASC';
$sql_result = $connect->query($sql_select);
while($row = $sql_result->fetch_assoc()){
// Construct the array with available sensors for the selected station
foreach($row as $a => $aa){
if($a=="id_sensor"){
$index = $aa;
//$sens[$aa]=$aa;
}
if($a=="sensor_type_name"){
$sens[$index]=$aa;
}
}
}
print_r($sens);
} |
Si j'ai deux capteurs enregistrée, il me retorune ceci (pour la station 2, j'en ai enregistré 2)
Citation:
Array ( [13] => wl [14] => wln )
si tous les capteurs (soit 12) sont enregistrés dans la base de donnée, il me retourne ceci (pour la station 1, j'en ai enregistré 12)
[QUOTE]
Array ( [1] => wl [2] => wln [3] => hfs [4] => hfb [5] => ta [6] => ts [7] => t30mm [8] => t60mm [9] => t100m [10] => t200m [11] => t500mm [12] => t1200mm )
[/CODE]
A savoir que l'index de mon array '$sens' représente l'ID de mon capteur. La valeur de '$sens' représente le type du capteur...
Mon objectif et de vérifier qu'il y a bien 12 différents capteurs enregistrés pour une station et d'indiqué quel est (ou sont) le capteur manquant.
Donc pour la station1, le script peut continuer.
En revanche pour la station 2, le script doit s'arreter.
La liste des types de capteurs est la suivante
Code:
1 2
|
$check_sensor_type='wl,wln,hfs,hfb,ta,ts,t30mm,t60mm,t100mm,t200mm,t500mm,t1200mm'; |
J'ai donc essayé ceci:
Code:
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
|
$sql_select = 'SELECT se.id_sensor, stype.sensor_type_name FROM stations AS sa
LEFT JOIN sensors AS se ON sa.id_station = se.stations_id_station
LEFT JOIN sensor_types AS stype ON se.sensor_types_id_sensor_type = stype.id_sensor_type
WHERE se.stations_id_station = "'.$station_id.'"
AND stype.sensor_type_name IN ('.$check_sensor_type.')
ORDER BY se.stations_id_station ASC';
$sql_result = $connect->query($sql_select);
while($row = $sql_result->fetch_assoc()){
// Construct the array with available sensors for the selected station
foreach($row as $a => $aa){
if($a=="id_sensor"){
$index = $aa;
//$sens[$aa]=$aa;
}
if($a=="sensor_type_name"){
$sens[$index]=$aa;
}
}
}
print_r($sens); |
mais ceci me retorune ce message d'erreur
Citation:
Fatal error: Uncaught Error: Call to a member function fetch_assoc() on boolean
et ce message erreur faire référence à cette ligne
Code:
while($row = $sql_result->fetch_assoc()){
ce qui me laisse coire que ma requête SELECT ne me retourne rien du tout.
Je me demande donc 1) si j'utilise correctement le IN et si il ne peut être utiliser que pour comparer des ID
Si non comment arriver à mon but?
Milles mercis pour vos lumières