Requête sql, comment faite vous ?

WRInaute passionné
Bonjour,

Quelle est votre façon d'écrire cette requête (Select id de telle table dont l'id est égal à cette id):
Code:
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE id = '".$monid."'");
while($complement = mysql_fetch_array($query3))
 {
   echo $complement['id'];
 }
ou
Code:
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE id = '".$monid."'");
$lid="";

while($complement = mysql_fetch_array($query3))
 {
   $lid = $complement['id'];
   $lid.="$id";
 echo ''.$lid.'';
 }
ou encore d'autres façons ?
Quelle est la plus simple et la plus rapide pour appeler le résultat dans et en dehors du while?
 
WRInaute impliqué
pourquoi faire un while si tu as un seul id à récupérer?
Code:
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE id = '".$monid."'");
$complement = mysql_fetch_array($query3)
$lid = $complement['id']; ou $lid = $complement[0]['id']; (je sais plus comment ça récupère)
 
WRInaute discret
Re tryan !

Donc moi j'utilise ce code qui pour moi est .. très bien =) :

Code:
<?php
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE id = '".$monid."'");
while($complement = mysql_fetch_array($query3))
{
    echo $complement['id'];
}
?>

et :

Code:
<?php
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE id = '".$monid."'");
while($complement = mysql_fetch_array($query3))
{
    $lid[] = $complement['id'];
}

for($i=0; $i<count($lid); $i++)
{
    echo $lid[$i];
}
?>
 
WRInaute impliqué
mic54800 a dit:

Je comprends pas trop l'intérêt de faire 2 boucles ... à part perdre un peu de temps.

EDIT: et encore moins dans le code que tu as édité car il te suffisait d'initialisé ton $i à l'extérieur du while et de faire un $i++ avant la fin du while.
 
WRInaute passionné
screuscreu a dit:
pourquoi faire un while si tu as un seul id à récupérer?
Pas besoin de while pour 1 résultat ?
Quelle est la tête de la requête alors ?
Et si à l'inverse une requête est effectué avant celle ci pour obtenir le résultat de plusieurs id .. quelle serait alors la tête de la requête ?
Merki
 
WRInaute discret
C'est sur que c'est un peu louche mais je me suis déjà servi de ce genre de boucle.
En fait, dans un fichier inclu en début de chaque page, j'avais une requete qui me séléctionnait les catégories du site (par exemple : Scooters, Motos, Quads, Buggys ...) et étant donné que j'avais besoin à plusieurs endroits dans la page de ces données, je n'avais plus qu'à faire une petite boucle avec mon for() au lieu de retaper la requete à chaque fois.
C'est un peu tordu je peux le reconaitre mais perso, ça peut servir et surtout, ça évite toujours de se retrouver avec 5 fois la même requete dans une page.
 
WRInaute impliqué
tryan a dit:
screuscreu a dit:
pourquoi faire un while si tu as un seul id à récupérer?
Pas besoin de while pour 1 résultat ?
Quelle est la tête de la requête alors ?
Et si à l'inverse une requête est effectué avant celle ci pour obtenir le résultat de plusieurs id .. quelle serait alors la tête de la requête ?
Merki
Pour la première question c'est le code que j'ai mis dans ma première réponse.
Pour la 2ème :

Code:
<?php
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE status="Actve");
while($complement = mysql_fetch_array($query3))
{
    $lid[] = $complement['id'];
}

$query4 = mysql_query("SELECT name, coucou, tralala FROM `PRODUITS` WHERE id IN (" . implode(', ',$lid) . "));
while($complement = mysql_fetch_array($query4))
{
  // tes données
}

?>

OU directement (et mieux) :
Code:
<?php

$query4 = mysql_query("
SELECT 
     name, 
     coucou, 
     tralala 
FROM 
     `PRODUITS` 
WHERE 
     id IN (
          SELECT 
               id 
          FROM 
               `COMPLEMENT_INFO` 
          WHERE 
               status="Actve"
     )
);
while($complement = mysql_fetch_array($query4))
{
  // tes données
}

?>

En espérant ne pas avoir fait d'erreurs grossières.

EDIT : indentation comme j'aime
 
WRInaute impliqué
tryan a dit:
tonguide a dit:
Code:
$query = ....;

list($id) = mysql_fetch_row($query);

echo $id;
La je ne pige pas cette partie list($id) .. que vient faire le list() ici ?

C'est une façon de nommer des variables en sortie de requète (entre autre).
Voir exemple qui sort de la doc php :
Code:
<table>
 <tr>
  <th>Nom de l'employé</th>
  <th>Salaire</th>
 </tr>

<?php

$resultat = mysql_query ("SELECT id, nom, salaire FROM employes",$conn);
while (list ($id, $nom, $salaire) = mysql_fetch_row ($resultat)) {
    echo " <tr>\n".
           "  <td><a href=\"info.php?id=$id\">$nom</a></td>\n".
           "  <td>$salaire</td>\n".
           " </tr>\n";
}

?>
</table>

En gros rien à voir avec ton problème.
 
WRInaute passionné
Euh, faut lire la doc PHP.

Un exemple fournit sur la doc en question :

<?php

$info = array('coffee', 'brown', 'caffeine');

// Liste toutes les variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";
?>

Si tu prends notre cas, ton "$info" ressemble à

$info = array('id' => 'valeur');

Donc si tu veux recup "valeur", tu fais comme dans l'exemple

list($nom_de_ta_variable) = $info;

Sauf que dans ton cas, le $info c'est mysql_feth_row($query);
 
WRInaute impliqué
tonguide a dit:
Euh, faut lire la doc PHP.

Un exemple fournit sur la doc en question :

<?php

$info = array('coffee', 'brown', 'caffeine');

// Liste toutes les variables
list($drink, $color, $power) = $info;
echo "$drink is $color and $power makes it special.\n";
?>

Si tu prends notre cas, ton "$info" ressemble à

$info = array('id' => 'valeur');

Donc si tu veux recup "valeur", tu fais comme dans l'exemple

list($nom_de_ta_variable) = $info;

Sauf que dans ton cas, le $info c'est mysql_feth_row($query);

Oui parce que tu es en feth_row et que monsieur utilise array ;)
Donc lui il commence à se perdre !!!

Si tu as des question envoi moi un MP on ira plus vite sur msn/gtalk/skype/aim ou autre ... suis assez connecté;)
 
WRInaute passionné
Si tu le dis, qu'il utilise mysql_fetch_row ou mysql_fetch_array, ça marchera (tu peux tester si tu ne me crois pas).
A la différence que mysql_fetch_row est plus optimisé, et c'est justement ce qu'il a demandé.
 
WRInaute accro
Quand tu ne veux sélectionner qu'1 seul enregistrement en BDD, n'oublie pas non plus d'utiliser "LIMIT 1" à la fin de ta requête SQL. Ca évite que le script parcours toute la base de données et ça gagne du temps.
 
WRInaute passionné
Si tu cherches sur un ID en primary key, c'est moins optimisé de rajouté "LIMIT 1" qui ajoute une instruction inutile (un ID étant sensé être unique, si c'est pas le cas, effectivement, il faut l'ajouter).
 
WRInaute passionné
Ouaiii .. bhin vous savez quoi ? Maintenant je suis encore plus largué qu'avant :lol: !
J'ai pris "la sale" habitude de faire comme sa pour tout:
Code:
$query3 = mysql_query("SELECT id FROM `COMPLEMENT_INFO` WHERE id = '".$monid."'");
$lid="";

while($complement = mysql_fetch_array($query3))
{
   $lid = $complement['id'];
   $lid.="$id";
echo ''.$lid.'';
}
..que se soit pour un résultat unique ou non 8O !

Bon, maintenant je vais éviter de boucler inutilement sur un résultat unique (voir code de screuscreu début de topic).
Et pour le reste ... je vais allé me pendre :mrgreen: .

Merci pour les infos.
 
Discussions similaires
Haut