Regex... à plusieurs conditions

Résolu
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012 - 22 juil. 2010 à 12:36
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

6 réponses

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
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
3
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
22 juil. 2010 à 13:04
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...
0
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
22 juil. 2010 à 14:16
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
22 juil. 2010 à 14:41
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.
0

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

Posez votre question
cs_hdh Messages postés 140 Date d'inscription mardi 3 juin 2003 Statut Membre Dernière intervention 20 août 2012
23 juil. 2010 à 10:00
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
0
TychoBrahe Messages postés 1309 Date d'inscription samedi 31 janvier 2009 Statut Membre Dernière intervention 5 juin 2013 12
23 juil. 2010 à 10:37
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.
0
Rejoignez-nous