Sélection sur toutes les tables d'une bdd.

Fermé
Skalv - 21 avril 2011 à 11:23
 Skalv - 21 avril 2011 à 16:10
Bonjour,

je réalise pour mon entreprise un bon de commande en php.

Je sauvegarde chacun de ces bon dans ma bdd, un bon par table.
C'est à dire : à chaque validation de bon, une numéro est incrémenté et celui-ci devient le nom de ma table (une table contient le nom de l'émetteur, sont service, la liste des produit commandé le montant ect ..)

j'aimerais mettre en place une "gestion des archives" où l'on peut rechercher la liste des bons de commandes par fournisseur ou par produit par exemple.

Le problème est que je ne trouve pas la requête adéquate, c'elle qui me permettrait de rechercher dans toute ma base, qu'elle table contient le champ fournisseur avec la donnée "fnac" par exemple ?

en gros un : SELECT * FROM * WHERE emetteur=jean eymare;

j'espère avoir été clair :)
Merci, Bonne journée.

4 réponses

siniko44 Messages postés 172 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 29 novembre 2013 17
21 avril 2011 à 14:24
Hum ça doit être un joyeux bordel ta BDD, je ne voit pas pourquoi tu as besoin de créer une table par bon... Soit.
Dans ce cas, il faudrait utiliser une fonction qui appelle toutes les tables, qui les classe dans un tableau, créer une boucle pour rechercher dans chaque table si la colonne emetteur contient 'jean eymare'... Fin bref, sa prendrais un sacré bout de temps...
Dit moi si tu restes sur cette idée, je pourrais quand même t'aider.
0
Panshu Messages postés 31 Date d'inscription mardi 19 avril 2011 Statut Membre Dernière intervention 26 mai 2014
21 avril 2011 à 15:04
C'est aussi mon avis, ta base est ingérable.. Pourquoi ne pas tout simplement utiliser deux ou trois tables liées par un id ?
0
Merci de vos réponses.

Je sais ma base est énorme, mais le projet a évoluer au fil du temps et c'est devenus un petit merdier.

j'ai trouvé une solution :)

je commence par un SHOW TABLE qui me donne un listing de toute mes tables, donc de tout me numéro de commande. pour chaque résultat je lance une boucle qui vient vérifier si la table contient la donnée recherché.

Quand j'explique comme ca je me ré-embrouille.

Voici le code (peut être plus explicite, ou pas ....)
$codetva=$_POST['codetva']; 
    
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
$bdd = new PDO('mysql:host=###;dbname=###', '###', '####', $pdo_options); 
    
$query='SHOW TABLES'; 
$query=$bdd->query($query); 
$res=$query->fetchALL(PDO::FETCH_ASSOC); 
while(list($key,$array)=each($res)) 
{ 
 foreach($array as $table) 
 { 
$numcommande=$table[1].$table[2].$table[3].$table[4].$table[5].$table[6].$table[7].$table[8]; 
      
$reponse = $bdd->prepare('SELECT * FROM 'commande'.':table' WHERE codetva=:codetva'); 
$reponse -> execute(array('table' => $numcommande, 
     'codetva' => $codetva)); 

  while ($donnees = $reponse->fetch()) 
 { 
 <tr> 
 <td Align=center width=50px><?php echo $donnees['ref']; ?></td> 
 <td Align=center width=400px><?php echo $donnees['desi']; ?></td> 
 <td Align=center width=50px><?php echo $donnees['quant']; ?></td> 
 <td Align=center width=80px><?php echo $donnees['puht']; ?></td> 
 <td Align=center width=80px><?php echo $donnees['emetteur']; ?></td> 
 <td Align=center width=80px><?php echo $donnees['service']; ?></td> 
 <td Align=center width=80px><?php echo $donnees['fourni']; ?></td> 
 <td Align=center width=80px><?php echo $donnees['observation']; ?></td> 
 <td Align=center width=80px><?php echo $donnees['codetva']; ?></td> 
 </tr>      
 } 
} 


J'ai aussi eu un autre problème, la variable $table me retournait un nom de table du style " '50000060' " et ensuite dans la requête les apostrophes ne passait pas (nom de table inconnus), c'est pour cela que je prend une seconde variable contenant juste le numéro.

Je dois présenter le programme demain, ceci fonctionne (par miracle oui !) mais je voudrais le "simplifier" par la suite donc je reste à votre écoute ;)

Bonne journée.
0
siniko44 Messages postés 172 Date d'inscription vendredi 30 juillet 2010 Statut Membre Dernière intervention 29 novembre 2013 17
21 avril 2011 à 16:00
C'est la méthode dont je voulais te parler, et je ne vois pas de meilleur solution :/.
Le chargement n'est pas un peu trop long ?
0
Pour l'instant il n'y a que mes tests dans la base (environ 60), donc non :)

A suivre une fois balancé sur le réseau :)

je cherche déjà comment optimiser tout ca, mais vus que je suis en stage je n'ai pas envie de ne voir que du php ...
0