Requete sur requete ?

Eléphanteau du PHP | 17 Messages

18 juil. 2005, 11:29

bonjour,
j'aimerai faire une requête sur une requête mais je ne sais pas si c'est possible, ça m'éviterais de passer par une table temporaire...
Ma première requête est construite ainsi :
$Requete = mysql_query("SELECT * FROM table ORDER BY RAND() LIMIT 0 , 6");

Et j'aimerai ensuite trier ce résultat par Numéro. J'ai essayé de faire ça :
$Requete = mysql_query("SELECT * FROM $Requete ORDER BY Num");

evidemment ça ne marche pas, mais ça dois etre possible de faire qqchose comme ça non ? :lol:
Antony un ami qui vous veut du bien...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 11:30

comme ça ça ne marchera pas mais pourquoi ne pas trier directement par numéro ?

si tu veux prendre 6 enregistrements au hasard puis les ordonner par numéro essaye à la suite :

Code : Tout sélectionner

SELECT ù FROM table ORDER BY RAND(), numero LIMIT 0,6
édition : en fait ça ne semble pas marcher
Modifié en dernier par ouckileou le 18 juil. 2005, 11:33, modifié 2 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

18 juil. 2005, 11:31

$Requete est un pointeur de résultat, et en aucun cas un nom de table existant dans la base de données.
Si la 1ere requête te récupère un nom de table, il faut traiter les résultats. Mais je pense que tu veux chercher un résultat dans les résultats de la 1ere requête, c'est ça ?

Eléphanteau du PHP | 17 Messages

18 juil. 2005, 11:36

c'est la première chose que j'ai essayé ouckileou mais non ça ne marche pas. Je peux par contre faire ORDER BY Num, RAND() mais là ça ne me retourne pas ce que je veux...
mere-teresa, ce n'est pas exactement ça. Ma première requête me donne une liste de ma base de façon aléatoire et ensuite j'aimerai trier cette liste par numéro.
Antony un ami qui vous veut du bien...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 11:40

alors personnellement je ne vois que ces solutions :
- faire une sous requête
- trier ces choix en PHP : mois optimal mais comme tu n'en prends que 6 ça devrait aller

sinon je ne sais pas désolé :roll:

Eléphanteau du PHP | 17 Messages

18 juil. 2005, 11:42

Comment ça une sous-requête ? Je pensais plutot à une table temporaire au début mais ça m'embête de passer par là à cause du temps de chargement...
Antony un ami qui vous veut du bien...

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

18 juil. 2005, 11:47

un truc de ce genre là :

Code : Tout sélectionner

SELECT * FROM (SELECT * FROM `table` ORDER BY RAND() LIMIT 0 , 6) AS sous_requete ORDER BY numero
c'est une suggestion, à tester :)

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

18 juil. 2005, 11:51

Ma première requête me donne une liste de ma base de façon aléatoire et ensuite j'aimerai trier cette liste par numéro.
Utilises le sort() de PHP et fais un mysql_fetch_array ===> tu auras un tableau de résultats, donc un tableau de $tablo_res['lenumero'] et tu pourras classer ces chiffres !
http://fr.php.net/manual/fr/function.sort.php
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

Mammouth du PHP | 543 Messages

18 juil. 2005, 12:38

Code : Tout sélectionner

select * from table t1 inner join (select Num from table order by rand() limit 6) t2 on t2.Num=t1.Num order by t1.Num asc;
@+

Eléphanteau du PHP | 17 Messages

18 juil. 2005, 13:11

J'ai essayé ta requete Raptor ça me renvoie une erreur (Warning: mysql_fetch_array(): supplied argument is not a valid MySQL...). Je ne pense pourtant pas avoir fait d'erreur :
$Requete = mysql_query("SELECT * FROM cartes t1 inner join (select Num from cartes ORDER BY RAND() LIMIT 0 , 6) t2 on t2.Num=T1.Num order by t1.Num asc");
while ($rows = mysql_fetch_array($Requete)){
$Image = $rows['Point'];
echo "<a href='$Image' target='_blank'><img src='$Image' border='1'></a>&nbsp;&nbsp;";
}

Je vais essayer la proposition de mere teresa...on verra bien.
Antony un ami qui vous veut du bien...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 juil. 2005, 13:33

Il faut que tu fasses attention à la version de MySQL que tu utilise puisque les sous-requêtes ne fonctionnent qu'a partir de la version 4.1 :wink:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 17 Messages

18 juil. 2005, 13:49

lol merci pour l'info je suis chez free la version est la 4.0.22... c'est ballo... Il me reste quoi comme solution ? :?
Antony un ami qui vous veut du bien...

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

18 juil. 2005, 13:55

Essaye celle de mere-teresa
Ma première requête me donne une liste de ma base de façon aléatoire et ensuite j'aimerai trier cette liste par numéro.
Utilises le sort() de PHP et fais un mysql_fetch_array ===> tu auras un tableau de résultats, donc un tableau de $tablo_res['lenumero'] et tu pourras classer ces chiffres !
http://fr.php.net/manual/fr/function.sort.php
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 543 Messages

18 juil. 2005, 14:53

ok désolé pour la version

alors :
$req = mysql_query("select Num from table order by rand() limit 6");

$total = mysql_num_rows($req);
if ($total==0) {
  echo "pas de résultat";
} else {
  $liste = "";
  while ($res = mysql_fetch_array($req)) {
   $liste.="|"$res["Num"];
  }
  $liste = substr($liste,1);
  $req2 = mysql_query("select * from table where Num REGEXP '^(".$liste.")$' order by Num asc");
  
  /* Ici le traitement du resultat de la requete */

}

@++

Eléphanteau du PHP | 17 Messages

18 juil. 2005, 15:50

Si je fais ton code Raptor j'ai une erreur à la ligne 8 (parse error T_VARIABLE...) que j'ai réussi à corriger en faisant ceci :
$liste.= "|" & $res["Num"];

Mais ensuite quand j'effectue le traitement du résultat de la requete comme ceci :
while ($rows = mysql_fetch_array($req2)){
$Image = $rows['Num'];
echo $Image;
}
il m'affiche cette erreur : Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result...
J'ai essayé de changer quelques trucs mais je comprends pas tout à ton code et j'aime bien comprendre ce que je met : ça sert à quoi cette commande "REGEXP '^(".$liste.")$" ? Merci encore pour votre aide à tous.
Antony un ami qui vous veut du bien...