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

Messages postés
140
Date d'inscription
mardi 3 juin 2003
Dernière intervention
20 août 2012
- - Dernière réponse : cs_hdh
Messages postés
140
Date d'inscription
mardi 3 juin 2003
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 

Votre réponse

6 réponses

Meilleure réponse
Messages postés
140
Date d'inscription
mardi 3 juin 2003
Dernière intervention
20 août 2012
1
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 111 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
Dernière intervention
5 juin 2013
12
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
Dernière intervention
20 août 2012
1
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
Dernière intervention
5 juin 2013
12
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
Dernière intervention
20 août 2012
1
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
Dernière intervention
5 juin 2013
12
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

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.