Problème SQL date null comment remplacer par 0 ?!

Résolu/Fermé
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022 - Modifié le 16 déc. 2021 à 15:28
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022 - 18 déc. 2021 à 10:30
Bonjour,

J'ai dans bdd plusieurs organisateurs qui créer des évènements.
chaque évènement et daté.

j'ai récupérer au format json pour chaque organisateur tout les évènements par mois au court de l'année précédente.

cependant il y a des mois ou il n'y a pas eu d'évènement donc pas de valeur.
ce qui m'embête pour réalisé un graphique en ligne des évènements par rapport au mois de l'année de janv à déc.. exemple si le mois na pas de valeur qu'il soit quand même affiché et l'évènement à 0.

voici mon code


{#.......requête ....."}

        $queryResult2 = $result2->fetchAllAssociative();

        $mois = [];
        $nbrEvent = []; 

        foreach($queryResult2 as $result) { 
            $orga = $queryResult2[0]['organisme'];
            $mois[] = $result['mois'];
            $nbrEvent[] = $result['nombre'];
        }

{# je retourne à ma vue ceci #}

            'orga' => json_encode($orga),
            'mois' => json_encode($mois),
            'nbrEvent' => json_encode($nbrEvent),



j'obtiens ceci au format json

"org3" (l'organisme)
["1","2","3","4","5","8","9","10","11","12"] (les mois)
["2","3","4","2","2","4","2","2","2","2"] (le nombre d'évènement par mois)

c'est ce que je recherche mais ici comment faire pour afficher tout les mois de 1 à 12 même ceux inexistant
et les évènements qui correspondent à c mois manquant par un 0

S'il vous faut plus d'info je suis là en attendant je continue mes recherches
Merci

Configuration: Windows / Chrome 96.0.4664.93

4 réponses

jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
Modifié le 16 déc. 2021 à 18:12
Bonjour,

Sachant que tu poses ta question dans le forum base de données... ce qui nous aurait interessé c'est la requête SQL ... pas ce que tu en fais après ..
Sachant qu'Il est possible, dans la requête, de générer les dates "manquantes" entre deux dates ...


Mais bon, ne sachant rien de ta requête SQL et voyant que ton code est du PHP je déplace donc ta question dans le forum PHP.
Et donc, en PHP, il faut :
1 - Que tu alimentes ta variables $mois, non pas avec le résultat de la requête SQL ... mais que tu te créés un code qui te permette de générer la liste voulue.
(facile.. visiblement tu veux les douze mois de l'année)
$mois = [1,2,3,4,5,6,7,8,9,10,11,12];



2 - lorsque tu récupères le "nombre" tu regardes si il est associé à un mois.. sinon tu retourne 0
$orga = $queryResult2[0]['organisme'];
  foreach($queryResult2 as $result) { 
       $nbrEvent[] = isset($result['mois']) && !empty($result['nombre']) ? $result['nombre'] : 0 ;
    }


0
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022
Modifié le 17 déc. 2021 à 09:12
Bonjour, merci pour la réponse mais comment la comparaison ce feras t'elle avec les 12 mois qu'on à généré "$mois", dans la boucle on vérifie seulement dans "queryResult2" si le mois existe et si le nombre d'éven n'est pas vide.

Par exemple on sais qu'il manque dans le tableau lorsqu'on récupère le tableau de la bdd le mois 6 et 7.
Car il n'y a aucun évènement avec une date de ces mois ci. donc aucun mois 6 et 7 en retour dans ma requête.
donc de base il n'y a pas 12 mois.


Peut être que se sera plus clair avec la requête mais la encore une fois es ce qu'on ce déplace du forum :/


$rawQuery1 = 'SELECT distinct organisme, COUNT(debut) AS nombre
        FROM partenaire
        JOIN user ON partenaire.id = user.partenaire_id
        JOIN evenement ON user.id = evenement.user_id
        WHERE debut < cast(now() as DATE)
        AND debut > cast((now() + INTERVAL -1 year) as DATE)
        group by organisme
        ORDER BY nombre DESC
        LIMIT 5;';

        $rawQuery2 = 'SELECT distinct organisme,month(debut) mois, COUNT(debut) AS nombre
        FROM partenaire
        JOIN user ON partenaire.id = user.partenaire_id
        JOIN evenement ON user.id = evenement.user_id
        WHERE debut < cast(now() as DATE)
        AND debut > cast((now() + INTERVAL -1 year) as DATE)
        AND organisme In (:org1, :org2, :org3, :org4, :org5)
        group by organisme, mois
        ORDER BY organisme;';
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
Modifié le 17 déc. 2021 à 09:24
tu as regardé le code que je t'ai donné ??
Tu l'as testé ???
0
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
Modifié le 17 déc. 2021 à 09:39
Evidement oui je l'ai testé est j'ai toujours le même résultat ["2","3","4","2","2","4","2","2","2","2"]. Donc j'ai continuer à m'en aspiré en essayant quelque modification mais sans plus.
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022
17 déc. 2021 à 11:24
heu.. ce n'est pas possible ... tu n'as pas repris le code que je t'ai donné...
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
17 déc. 2021 à 11:24
montre nous le code modifié ...
0
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022
17 déc. 2021 à 11:49
le code :


$queryResult2 = $result2->fetchAllAssociative();

        $mois = [1,2,3,4,5,6,7,8,9,10,11,12];

        foreach($queryResult2 as $result) { 
            $orga = $queryResult2[0]['organisme'];
            $nbrEvent[] = isset($result['mois']) && !empty($result['nombre']) ? $result['nombre'] : 0;
        }
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
Modifié le 17 déc. 2021 à 12:03
ah oui, petit oubli de ma part ...

pourrais tu me faire un var_dump de ta requête que je puisse voir ce qu'elle retourne exactement ?

//pour vérifier :
echo "<pre>queryResult2:<br>";
var_dump($queryResult2);
echo "</pres>";
0
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022
Modifié le 18 déc. 2021 à 08:23
Bonjour, voici le résultat

queryResult2:
array(10) {
[0]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "1"
["nombre"]=>
string(1) "2"
}
[1]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "2"
["nombre"]=>
string(1) "3"
}
[2]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "3"
["nombre"]=>
string(1) "4"
}
[3]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "4"
["nombre"]=>
string(1) "2"
}
[4]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "5"
["nombre"]=>
string(1) "2"
}
[5]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "8"
["nombre"]=>
string(1) "4"
}
[6]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(1) "9"
["nombre"]=>
string(1) "2"
}
[7]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(2) "10"
["nombre"]=>
string(1) "2"
}
[8]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(2) "11"
["nombre"]=>
string(1) "2"
}
[9]=>
array(3) {
["organisme"]=>
string(4) "org3"
["mois"]=>
string(2) "12"
["nombre"]=>
string(1) "2"
}
}

mais sachez quand je fais une requête je vérifie toujours les résultats avec un die dump ou un dump je récupère bien toute mes données utile de la bdd l'organisation le mois et son nombre d'évènement
0
jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024 4 705
18 déc. 2021 à 09:40
<?php


$queryResult2=array (
  0 => 
  array (
    'organisme' => 'org3',
    'mois' => '1',
    'nombre' => '2',
  ),
  1 => 
  array (
    'organisme' => 'org3',
    'mois' => '2',
    'nombre' => '3',
  ),
  2 => 
  array (
    'organisme' => 'org3',
    'mois' => '3',
    'nombre' => '4',
  ),
  3 => 
  array (
    'organisme' => 'org3',
    'mois' => '4',
    'nombre' => '2',
  ),
  4 => 
  array (
    'organisme' => 'org3',
    'mois' => '5',
    'nombre' => '2',
  ),
  5 => 
  array (
    'organisme' => 'org3',
    'mois' => '8',
    'nombre' => '4',
  ),
  6 => 
  array (
    'organisme' => 'org3',
    'mois' => '9',
    'nombre' => '2',
  ),
  7 => 
  array (
    'organisme' => 'org3',
    'mois' => '10',
    'nombre' => '2',
  ),
  8 => 
  array (
    'organisme' => 'org3',
    'mois' => '11',
    'nombre' => '2',
  ),
  9 => 
  array (
    'organisme' => 'org3',
    'mois' => '12',
    'nombre' => '2',
  )
);


//On commence par réorganiser l'array par  mois 
$organ = $queryResult2[0]['organisme'];

$arrOrga = [];
foreach($queryResult2 as $R){
  $mois = $R['mois'];
  $nb = $R['nombre'];
  $arrOrga[$mois] = $nb;
}
  
$mois = [];  
for($i=1;$i<=12;$i++){
  $mois[]= $i;  
  $nbrEvent[] = isset($arrOrga[$i]) ? $arrOrga[$i] : 0;
}

echo "<pre>";
var_dump($nbrEvent);
echo "</pre>";


  



0
rdbn Messages postés 95 Date d'inscription samedi 3 avril 2021 Statut Membre Dernière intervention 26 décembre 2022 > jordane45 Messages postés 38314 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 24 novembre 2024
Modifié le 18 déc. 2021 à 10:31
Merci ! Vous m'avez aidé à résoudre ce problème. Organiser les Evènements par mois dans un tableau . Puis dans une boucle for incrémenté jusque 12, d'ajouter les mois manquants pour valeur 0.
0