Besoin d'aide pour requete mysql

Eléphant du PHP | 59 Messages

22 mai 2010, 22:31

Bonjour,

J'aurais besoin d'un peu d'aide.
J'ai crée ce code:
 if($_GET['field_distance']==1) {
$whereId = implode( " , ", $sIDs );
$query = "SELECT (itemid) FROM `#__arti2_fields_data` " .
			 	 	 "WHERE ( itemid IN ({$whereId}) AND `fieldid` = 44 AND `data_txt`    > 30) ";
			$database->setQuery( $query );
$sIDs = $database->loadResultArray();
}
Donc ce code me permet de récupérer tous les itemid qui sont compris dans $whereId, avec fielid = 44 et data_txt supérieur à 30
par exemple $whereId = 1 , 2 , 3 , 4

Maintenant voilà mon problème
Je voudrais remplacer le chiffre 30 de ma requête par le résultat de cette fonction:

rs_showDistance( Id )

où Id doit être remplacer par la valeur de l'itemid, soit 1 ou 2 ou 3 ou 4, et à chaque fois le résultat est différent

La nouvelle requête devrait me permettre de récupérer tous les itemid qui sont compris dans $whereId, avec fielid = 44 et data_txt supérieur au résultat de la fonction rs_showDistance( Id )

J'espère que j'ai été assez clair dans mon explication. Si quelqu'un sait comment faire, merci d'avance.

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2010, 11:37

En gros il te faut les enregistrements pour lesquels :
WHERE `fieldid` = 44 AND ( 
    itemid  = 1  AND `data_txt`  >   rs_showDistance( 1 ) 
  OR
    itemid  = 2  AND `data_txt`  >   rs_showDistance( 2 ) 
  OR
    itemid  = 3  AND `data_txt`  >   rs_showDistance( 3 ) 
  ...
)
Pourquoi ne pas boucler sur ton tableau $sIDs pour générer chacune des lignes itemid/data_txt et construire une requête sql en concaténant les moreaux ?
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 59 Messages

23 mai 2010, 12:01

Merci ryle, tu as tous compris.

En faîtes il s'agit d'un code de composant joomla que je modifie, et je ne peut pas faire une boucle directement sur le tableau $sIDs.

Il faudrait que je le fasse dans mon if{ }.

Si t'as quelques conseil à me donner, parceque je débute et là je t'avoue que je suis un peu perdu.

Merci

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

23 mai 2010, 12:32

Ben là où tu as ton if(), tu peux construire ta requête comme ceci :
// on commence par écrire le début du select
$query = "SELECT (itemid) 
  FROM `#__arti2_fields_data`
  WHERE `fieldid` = 44";

// on créer ensuite un tableau de condition 
$condition = array();
// pour chaque id, on écrit la portion de chaine sql correspondante et on l'ajoute dans le tableau
foreach ($sIDs as $id) {
  $condition[] = "itemid  = ". $id ."  AND `data_txt`  > " . rs_showDistance( $id ); 
}

if (count($condition) > 0) // s'il y a des condition on les ajoute à la suite de la requête
  $query .= " AND ( ". implode(' OR ', $condition) ." )";
A vérifier avec un echo $query, mais normalement, ça devrait te générer la requête ci-dessus :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Eléphant du PHP | 59 Messages

23 mai 2010, 13:19

Merci Ryle.
Super boulot. Ca marche impeccable. =D>