Page 1 sur 1

Petite fonction pour récupérer une seule info dans al base

Posté : 16 oct. 2005, 11:06
par Cobaye
Petit fonction inspirer de dlookup de vba (access), elle permet simple d'aller chercher la valeur d'un champ dans une table avec des conditions optionnelles.

Elle évite de se rettaper le code à chaque fois pour une info
function lookup($champ, $table, $condition=""){
	global $connect;

	$sql = "SELECT ".$champ." as valeur FROM ".$table;
	if($condition!="") $sql.= " WHERE ".$condition;
	$result = mysql_query($sql);
	$rst = mysql_fetch_array($result);
	$valeur = $rst['valeur'];
	mysql_free_result($result);
	if($valeur){
		return $valeur;
	}else{
		return false;
	}
}
pour l'utiliser :
$variable = lookup("nomchamp","table","condition");
Exemple:
$variable = lookup("NomUtilisateur","TblUtilisateur","IdUtilisateur=".$IdUtilisateur);
$variable = lookup("count(IdUtilisateur)","TblUtilisateur","");

Posté : 16 oct. 2005, 11:53
par Vaedan
L'idée est interessante mais je te conseille plutot une requete du genre :
if ( empty( $condition ) )
{
    $condition = '1';
}

$sql = 'SELECT * FROM ' . $table . ' WHERE ' . $condition . ' LIMIT 1';
Ensuite du place les resultats du fetch_array() en cache, ce qui te permet de ne pas rééexécuter une requete sur la table pour un autre champ !

J'espere t'avoir aidé pour l'optimisation de ta fonction :)

Posté : 16 oct. 2005, 13:39
par Ouaibou
Vaedan, je penses pas que ce soit une bonne idée le select * surtout pour un champ ;)

Posté : 16 oct. 2005, 13:40
par Cyrano
Jeu, set et match Ouaibou :langue:

Posté : 16 oct. 2005, 16:54
par albat
Modération :
Monsieur Cyrano, je vous en prie... [-X
Trop top de modérer un modérateur ! Rhâââ lovely... :langue:




La proposition de Vaedan est quand même intéressante et pertinente :
- avantage : évite de multiplier les appels à la fonction pour plusieurs champs
- inconvénient : le SELECT *

Voici ma suggestion :
Passer un tableau $champs comme paramètre d'entrée de la fonction.
Ce tableau contient alors la liste des champs à placer dans le SELECT.
Bilan : un seul parcours de la table par le SELECT. :pouce:

Sinon, on peut aussi utiliser une simple chaîne dans laquelle
on concatène/déconcatène les noms des champs à sélectionner.
Mais c'est moins élégant...

Posté : 16 oct. 2005, 17:13
par Cobaye
"avantage : évite de multiplier les appels à la fonction pour plusieurs champs"
on perd la finalité de ma fonction, elle répond à un besoin bien spécifique. son intérêt c'est de récupérer la valeur d'un champ quelque pars dans la base.

Pratique aussi pour ce genre de cas :
$variable = lookup("count(IdUtilisateur)","TblUtilisateur","TypeUtilisateur='VIPHP'"); 
ou si à un seul endroit du site on a besoin par exemple de l'adresse mail de l'utilisateur en cours. Si on a besoin qu'à un seul endroit et encore si l'internaute va sur la page en question. Inutile de stocker l'adresse mail en session quand l'utilisateur se connecte. Avec ma fonction on va juste cherche l'adresse mail.