Selectionner le contenu de toutes les tables d'une bdd qui comment par le meme prefix

Eléphant du PHP | 51 Messages

13 juil. 2021, 00:06

Bonjour à tous j'ai des données dans une bdd mysql que j'extrai sans souci.
Par contre j'ai besoin cette fois ci d'extraire les informations des bases de donnée mais en fonction du fait qu'elle ont le préfix "iso" devant leur nom.

$sql = "SELECT * FROM SELECT table_name
FROM information_schema.tables
WHERE table_type = 'base table' AND table_name like '%iso%'";

Ce code ne fonctionne pas et j'aimerai bien votre aide :)

Avatar du membre
Eléphant du PHP | 70 Messages

13 juil. 2021, 15:59

Salut,

Tu peux utiliser la requete SQL SHOW TABLES pour récupéré le nom des tables selon un pattern.
$sth = $req->query("SHOW TABLES LIKE 'iso%'");
$table = $sth->fetchAll(PDO::FETCH_ASSOC);
Tu peux aussi spécifier une BDD particulière comme ceci :
$sth = $req->query("SHOW TABLES FROM db_name LIKE 'iso%'");
$table = $sth->fetchAll(PDO::FETCH_ASSOC);
Pratique si tu a plusieurs BDD dans un même environnement
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Eléphant du PHP | 51 Messages

13 juil. 2021, 22:03

Merci de ton aide
J'arrive à un résultat mais impossible d'afficher le contenu de ces tables. *

$sth = $pdo->query("SHOW TABLES FROM nomtable LIKE 'iso%'");
$table = $sth->fetchAll(PDO::FETCH_ASSOC);
print_r($table);



echo "<table>";

while($row = mysql_fetch_array($table)){
echo "<tr><td>" . $row['id_truc'] . "</td><td>" . $row['id_machin'] . "</td></tr>";
}

echo "</table>";

Merci de ton aide en tout cas

Eléphant du PHP | 51 Messages

13 juil. 2021, 23:15

Je continue mes recherche

Code : Tout sélectionner

$query=$link->query("SELECT 'SELECT iso4580.id_acte AS idacte, iso4580.prescripteur AS prescri FROM '+TABLE_NAME FROM INFORMATION_SCHEMA.TABLES WHERE TABLE_NAME LIKE '%iso%'"); while($rows = $query->fetch_assoc()) { $cont_idacte = $rows ['idacte']; $cont_prescri = $rows ['prescri']; echo "<p>id : $cont_idacte <br/></p>"; echo "<p>prescripteur : $cont_prescri <br/></p>"; }
Là je vois bien que le code essaye de m'afficher 3 occurences (j'ai trois tables qui correspondent à ce critère mais ca n'affiche rien.


Le code ci dessous fonctionne bien si j'interroge les bases une par une.

Code : Tout sélectionner

$query=$link->query("SELECT iso4580.id_acte AS idacte, iso4580.prescripteur AS prescri FROM iso4580,iso4578"); echo $query->num_rows;*/ while($rows = $query->fetch_assoc()) { $cont_idacte = $rows ['idacte']; $cont_prescri = $rows ['prescri']; echo "<p>id : $cont_idacte <br/></p>"; echo "<p>prescripteur : $cont_prescri <br/></p>"; }
Comment faire que ce code fonctionne non pas avec les nom des tables en dur mais sur le critère que la table possède le préfix "iso" ?

Merci de votre aide

Avatar du membre
Eléphant du PHP | 70 Messages

15 juil. 2021, 08:49

Salut !

SHOW TABLES va seulement te retourner le nom des tables qui commence par ton préfixe, si tu veux récupérer les données de ces tables tu va devoir faire un foreach qui fait une requete SQL avec chaque nom de table pour récupéré les données

De plus tu tente de récupéré les données via mysql_fetch_array, qui dans un premier temps est obsolète, et dans un deuxième temps ne sert a rien car tu a déja récupéré le nom de tes tables avec le fetchAll dans ta variable $table

Ce que tu doit faire maintenant c'est boucler $table qui va faire une requête pour chaque occurrence
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Eléphant du PHP | 51 Messages

16 juil. 2021, 20:13

Merci je fais mes recherches et je reviens par ici plus tard :)