Regex... à plusieurs conditions [Résolu]

Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
- - Dernière réponse : cs_hdh
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
- 26 juil. 2010 à 19:11
Bonjour
Je voudrais utiliser une expression régulière dans une requète mysql pour ne selectionner que les tables qui m'intéressent... la base est bonne et fonctionne

$requete = "SHOW TABLE STATUS  like  'edc%'";



mais dès que je veux rajouter une restriction du type 'et ne se termine ni par opens ni par clicks'.... là ca ne fonctionne plus (le résultat est 0)...

Un SaintBernard du PHP pourrait il sauver le pauvre homme que je suis ???

au plaisir de vous lire

le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Afficher la suite 

6 réponses

Meilleure réponse
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
3
Merci
Je viens de modifier le code suite à la remarque très sage de TychoBrahe :-)
merci à lui !!
H


$requete =  "SELECT * FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
AND information_schema.TABLES.TABLE_NAME LIKE 'edc%'
AND information_schema.TABLES.TABLE_NAME NOT LIKE '%opens'
AND information_schema.TABLES.TABLE_NAME NOT LIKE '%clicks';
";


$result = mysql_query($requete) or die("Erreur lors de l'exécution : $requete");
$Nresult_user = mysql_num_rows($result);


print "Etat des tables

Il y a ".$Nresult_user." résultats.
";
print " Name  |Nbr de lignes |Created |Updated |\";

for ($j =0;$j<$Nresult_user;$j++)
{
$row = mysql_fetch_array($result);
print \"----
".$row[2].", ".$row[7].", ".$row[14].", ".$row[15].", \";
//		for($u=0;$u<22;$u++) {print \"
n°\".$u.\" >> \".$row[$u]; }
}
print "
";



le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus

Dire « Merci » 3

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

Codes Sources 195 internautes nous ont dit merci ce mois-ci

Commenter la réponse de cs_hdh
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
10
0
Merci
Salut,

Un SaintBernard du PHP pourrait il sauver le pauvre homme que je suis ???

Le seul soucis est que ça n'a pas grand chose à voir avec du PHP.

mais dès que je veux rajouter une restriction du type 'et ne se termine ni par opens ni par clicks'.... là ca ne fonctionne plus (le résultat est 0)...

C'est normal, la syntaxe de SHOW TABLE STATUS est très claire : tu ne peux rien ajouter comme condition.

Une solution compatible uniquement avec MySQL (attention à la sortie qui est différente) :
SELECT information_schema.TABLES.TABLE_NAME
FROM information_schema.TABLES
WHERE TABLE_SCHEMA = DATABASE()
      AND information_schema.TABLES.TABLE_NAME LIKE 'edc%'
      AND information_schema.TABLES.TABLE_NAME NOT LIKE '%opens'
      AND information_schema.TABLES.TABLE_NAME NOT LIKE '%clicks';


Après, je en sais pas à quoi ce genre de chose peu bien te servir, m'enfin bon...
Commenter la réponse de TychoBrahe
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
mmm merci TychoBrahe pour ton aide mais je pense qu'il y a moyen de se débrouiller avec des regexp.

A bientot !!

H

le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
10
0
Merci
je pense qu'il y a moyen de se débrouiller avec des regexp

Bien entendu, mais seulement avec ma solution car LIKE n'accepte pas d'expressions régulières, seulement quelques jokers (% et _). Pour faire des expressions régulières, il faut utiliser REGEXP, ce qui n'est pas autorisé dans SHOW TABLE STATUS.
Commenter la réponse de TychoBrahe
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Statut
Membre
Dernière intervention
20 août 2012
0
Merci
Hello,
merci pour votre aide :-)
finalement j'ai préféré travaillé comme cela : c'est pas forcément optimisé mais j'ai peu de tables et mon code est plus court

$requete =  "SHOW TABLE STATUS  like  'edc%'";

$result = mysql_query($requete) or die("Erreur lors de l'exécution de la requête :
 $requete ");

$Nresult_user  = mysql_num_rows($result);

for ($j=0;$j<$Nresult_user;$j++)  		
{	
$row = mysql_fetch_array($result);

if(!eregi("opens", $row[0]) && !eregi("clicks", $row[0])) 
{



le temps n'épargne pas ce que l'ont fait sans lui.. le php non plus
Commenter la réponse de cs_hdh
Messages postés
1310
Date d'inscription
samedi 31 janvier 2009
Statut
Membre
Dernière intervention
5 juin 2013
10
0
Merci
Salut,

finalement j'ai préféré travaillé comme cela : c'est pas forcément optimisé mais j'ai peu de tables et mon code est plus court

Là ton code est plus complexe et surtout mal structuré : faire en php ce que l'on devrai faire en sql, c'est une erreur de conception. J'ajouterai également que eregi() et consorts sont des fonctions obsolètes et qu'il est vivement encouragé de ne plus les utiliser.
Commenter la réponse de TychoBrahe