8791 sujets

Développement web côté serveur, CMS

Bonjour,
Je développe en PhP un programme d'épuration régulière de mes bases de données (gérées par SQLYog 6.06); Les critères d'épuration varient selon les tables (n°dossier supérieur à un certain nombre, inter datant de moins de 3 ans, etc).
Les données sont regroupées dans plusieurs bases, la table sur laquelle s'appuie le programme d'épuration se trouve dans une de ces bases, elle contient le nom de la base, le nom de la table à épurer et le filtre à appliquer sur la ou les colonnes.
Lorsque je veux appliquer un filtre sur les dates, du style :
...TO_DAYS(NOW()) - TO_DAYS(entdate) > 365

... j'ai un message d'erreur de SQLyog "unknown column entdate in field list".
Bien sûr la colonne 'entdate' appartient à une table qui ne se trouve pas dans la même BDD que celle où se trouve la table gérant les épurations.
L'erreur est la même si je préfixe le nom de la colonne avec celui de la table ou même avec base+table.
Une solution est d'encadrer mon bout de requête avec des apostrophes, mais je ne trouve pas ça très beau...
Sinon, mes collègues qui bossent avec la version 4 et 5 parviennent à effectuer cette opération sans problème!
Quelqu'un a-t-il une idée?
merci d'avance
Modifié par orionis (06 Sep 2007 - 11:30)
Modérateur
Salut,

Comme je ne suis pas encore bon en la matière, mais je peux te proposer ce lien. Hier soir, je suis tombé dessus par hasard. Peut être que cela t'aidera.

++
Modifié par Nolem (05 Sep 2007 - 12:26)
Hmm, pas vraiment, ta page concerne le PhP, or mon problème vient de la valeur à donner à la colonne 'filtre' de ma table d'épuration.
mais merci quand même Smiley smile
Salut orionis Smiley cligne ,

je ne suis pas sûr que mysql autorise des requêtes "multi-bases" Smiley rolleyes ...

Mais pour ce que tu veux faire, il me semble que ce serait plus simple de récupérer d'abord ton paramètre (entdate) puis de générer la requête sur la bonne database en l'interprétant
a écrit :
...TO_DAYS(NOW()) - TO_DAYS(valeur_interprétée) > 365

A+
Salut,
je me suis mal exprimé : entdate est le nom de la colonne de la table que je veux épurer...
Ah... je croyais que c'était un champ de ta table de paramètres...

Ben sinon je viens de faire le test suivant avec une table param dans une database test qui contient les champs nombase, nomtable et nomchamp (avec des enregistrements concernant des champs timestamp dans des tables d'une autre database Smiley murf ):
<?php
$requete = "select nombase, nomtable, nomchamp FROM test.param";
$result = mysql_query($requete) or die("Erreur lors de l'exécution de la requête :<br /><strong>$requete</strong>");
while($ligne = mysql_fetch_assoc($result))
{
	$nombase = $ligne['nombase']; 
	$nomtable = $ligne['nomtable']; 
	$nomchamp = $ligne['nomchamp']; 
	$requete2 = "select (TO_DAYS(NOW()) - TO_DAYS($nomchamp)) as value FROM $nombase.$nomtable";
	$result2 = mysql_query($requete2) or die("Erreur lors de l'exécution de la requête :<br /><strong>$requete2</strong>");
	echo '<strong>'.$nomchamp.' :</strong>'."<br />\n";
	while($ligne2 = mysql_fetch_assoc($result2))
	{
		echo $ligne2['value']."<br />\n";
	}
}
?>
et c'est tout bon Smiley cligne
En fait, j'ai trouvé la solution :
Tools/Preference -> décocher 'smart' KEYWORD/FUNCTIONS/DEFAULTS handling

Merci pour tes propositions! Smiley smile