[MySQL] SHOW TABLE avec condition

Résolu/Fermé
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012 - 21 juin 2012 à 12:19
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012 - 22 juin 2012 à 14:45
Bonjour,

Je suis actuellement en train de créer une application web qui traite des données client avec une visualisation et une édition.

J'aimerai faire en sorte que seul les "rapports" client validé sois visible dans le menu visualisation.
Mes rapports sont fait de la façon suivante: 1 BDD par an et une table par client.

j'ai donc pensé a deux solution:

1°: ajouter un booléen "est_valider" dans chaque table qui permettrai avec une requête du type "show table where est_valider=1" d'avoir le résultat que je cherche

2°:faire deux BDD par ans avec un systeme de migration de table

Ces deux idée me paraissent pertinentes mais dans les deux cas je ne sais pas comment faire ca en ligne de code. Vue que mon application sera utilisé par des non initié, impossible donc d'allez trifouillé dans PhPmyadmin et donc je suis obliger de faire tous pas le code.

Si quelqu'un a une solution pour l'une des deux solution je suis preneur
merci d'avance
A voir également:

11 réponses

trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012
21 juin 2012 à 15:13
up!
0
zetopskateuse
21 juin 2012 à 17:38
Salut.
Si vous avez déjà fait la validation des rapports, avec un booleen il suffit de rajouter à la validation "true" ou "false" dans le champ "est_valider" (avec une requete update par exemple : update nomtable set est_valide = true where ...) mais je pense que je ne comprends pas vraiment votre problème.
0
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 09:14
merci de ta réponse

mon probleme avec le boolean c'est le show table
je ne sais pas comment faire ma requete d'affichage de rapport qui on est_valider == 1;

pour le moment j'utilise cette requete:

$mysql_result = mysql_query("SHOW TABLES;",$connexion);

while ($ligne = mysql_fetch_row($mysql_result))
{
echo "<option>$ligne[0]</option>";
}

qui me retourne le nom de toute les tables de ma base mais moi je cherche a afficher juste les tables avec mon boolean a 1
0
Utilisateur anonyme
22 juin 2012 à 09:33
Bonjour

juste les tables avec mon boolean a 1 Une table ne contient pas un booleen, mais un champ de type booleen. Et si ta table a plusieurs lignes, ce qui doit être le cas en général, laquelle faut-il prendre en compte ? Et si elles ont toutes la même valeur sur ce champ, n'as-tu pas l'impression d'un gaspillage ?
Il m'aurait semblé tellement plus simple de créer une table des tables validées, et d'écrire dedans le nom de chaque table lors de sa validation.
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 10:28
merci pour ce cours d'informatique

je vais répéter a quoi ressemble ba BDD

En gros j'ai une base de donnée par année et chaque table correspond a un client.
Chaque table contient une seul et même ligne avec des dizaines de variable.
Je suis d'accord que sa parait pas du tout optimisé mais je dois optimisé un projet déjà fait sans bouger la BDD.

donc ma question est simple:

je compte mette un champ est_validé qui est un booléen
j'aimerai connaitre la ligne de commande permettant d'afficher toute les tables dont est_validé==1
0
Utilisateur anonyme
22 juin 2012 à 11:04
je vais répéter a quoi ressemble ba BDD
Il me semble qu'il n'avait jamais été dit qu'il n'y avait qu'une seule ligne par table. C'était pour tant une donnée intéressante, car cette structure est originale. Pour être tout à fait honnête, elle me semble même aberrante, mais après tout, je ne connais pas le fond de ton problème, c'est toi qui vois...
En tous cas, la requête SHOW TABLES n'admet aucune option permettant de tester le contenu de la table.
Mais il suffit de tester ton champ pour savoir :
$mysql_result = mysql_query("SHOW TABLES;",$connexion);

while ($ligne = mysql_fetch_row($mysql_result)) 
{ 
  $table=$ligne[0]; // je n'ai pas vérifié, je suppose que c'est bien ce champ qui contient le nom de ta table
  $req= 'SELECT count(*) cnt FROM '.$table.' WHERE est_valide';
  $rep=mysql_query($req);
  $ll=mysql_fetch_array($rep);
  if ($ll['cnt']>0) echo "<option>$ligne[0]</option>"; 
} 

Evidemment, c'est lourd, mais avec ta structure, je ne vois pas comment l'éviter. Si, en utilisant PDO et une requête préparée, ça allègera un peu le boulot de mysql
0
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 11:31
merci pour ta réponse et dsl de la mienne qui etait un peu froide

je suis d'accord avec toi pour la structure de la base de donnée surtout quand on sais que une ligne contient 545 champs...

Mais le tous semble fonctionné donc mes patrons veulent pas changer

merci encore
0
Utilisateur anonyme
22 juin 2012 à 11:44
Ils ne veulent pas changer, mais ils veulent quand même optimiser l'application, et toi tu as bien ajouté un champ. Bon, je renonce à comprendre.
Si la solution que je te propose répond au problème, peux-tu passer le sujet en résolu, ou alors préciser ce qui ne va pas ?
0
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 12:26
sa ne fonctionne pas mon menu déroulant reste vierge alors qu'une de mes tables a le champ est_valide a 1
0
Utilisateur anonyme
22 juin 2012 à 13:47
Tu as compris le principe ? Ça devrait marcher. llors fais quelques recherches, du genre
$rep=mysql_query($req) or die(mysql_error());
pour vérifier qu'il n'y a pas de problème dans l'exécution de la requête
Affiche aussi le nom de la table et la valeur de $ll['cnt'] trouvée pour chaque table. Tu finiras bien par tomber sur ce qui cloche.
0
trixxis Messages postés 12 Date d'inscription lundi 21 mai 2012 Statut Membre Dernière intervention 22 juin 2012
22 juin 2012 à 14:45
ok merci
0