Page 1 sur 1

Action si table vide ou pas

Posté : 08 janv. 2016, 19:35
par cite carter
Bonjour,

je voudrais faire apparaitre différentes choses selon trois cas de figure:

1 - si ma table est vide afficher un texte,

2 - ou si une colonne de cette table est vide afficher un autre texte

3 - sinon afficher les entrées de cette colonne.

Pour les 2 dernières j'y arrive facilement avec mon bout de code, mais pour la première je n'y arrive pas.

Code : Tout sélectionner

$rst = $bdd->query('SELECT macolonne from matable'); while($donnees = $rst->fetch()) { $macolonne = $donnees['macolonne']; if (empty($macolonne)) { echo 'mon autre texte'; } else { echo '$macolonne'; }

Re: Action si table vide ou pas

Posté : 08 janv. 2016, 19:48
par or 1
si la table est vide, le select ne retournera aucun résultat, donc, après l'exécution de la requete, il faut tester le nombre d'enregistrement retourné, et s'il est de 0, afficher le 3ème texte.

Re: Action si table vide ou pas

Posté : 08 janv. 2016, 21:53
par cite carter

Code : Tout sélectionner

$rst = $bdd->query('SELECT count(*) as nb from matable'); $data = $rst->fetch(); $nb = $data['nb']; if ($nb == 0) { echo 'mon texte'; } $rst = $bdd->query('SELECT macolonne from matable'); while($donnees = $rst->fetch()) { $macolonne = $donnees['macolonne']; if (empty($macolonne)) { echo 'mon autre texte'; } else { echo '$macolonne'; } }
Est-ce que ça vous parait correcte?

Re: Action si table vide ou pas

Posté : 11 janv. 2016, 17:52
par Ryle
Bonjour,

Ce code fonctionne, mais n'est pas optimisé, puisque après avoir compté le nombre d'enregistrement et avoir constaté qu'il était de 0, tu vas quand même aller chercher le contenu de la table pour vérifier les cas suivants (alors que si la table est vide, il est fort probable que ses colonnes le soient également ;))

Tu peux également éviter la requête supplémentaire en comptant le nombre de fois où tu es entré dans le while. En effet, si tu n'entre jamais dans la boucle, c'est qu'aucun enregistrement n'a été trouvé :
$rst = $bdd->query('SELECT macolonne from matable');
         $result = false; // flag true/false pour contrôler s'il y a des résultats (on peut aussi utiliser un compteur)
         while ($donnees = $rst->fetch()) {
                  $result = true; // il y a au moins un résultat
                  $macolonne = $donnees['macolonne'];
                  if (empty($macolonne)) {
                      echo 'mon autre texte';
                  }
                  else {
                      echo $macolonne; // pas d'apostrophe autour de la variable, sinon php écrira $macolonne en toutes lettres ;)
                  }           
         }
         if (!$result) { // aucun résultat trouvé
                  echo 'noooon rien de rieeeennn...';
         }

Re: Action si table vide ou pas

Posté : 11 janv. 2016, 21:47
par cite carter
Merci beaucoup.
Ayant des éléments "macolonne" dans 2 tables j'ai testé avec:

Code : Tout sélectionner

$rst = $bdd->query('SELECT macolonne AS MACOLONNEALL from matable UNION ALL SELECT macolonne AS MACOLONNEALL from matable2'); $result = false; // flag true/false pour contrôler s'il y a des résultats (on peut aussi utiliser un compteur) while ($donnees = $rst->fetch()) { $result = true; // il y a au moins un résultat $macolonne = $donnees['MACOLONNEALL']; if (empty($macolonne)) { echo 'mon autre texte'; } else { echo $macolonne; // pas d'apostrophe autour de la variable, sinon php écrira $macolonne en toutes lettres ;) } } if (!$result) { // aucun résultat trouvé echo 'noooon rien de rieeeennn...'; }
ça fonctionne très bien mais je ne suis pas sûre de la syntaxe.

Re: Action si table vide ou pas

Posté : 13 janv. 2016, 11:46
par Ryle
La syntaxe est bonne :)