Requete avec ASC et DESC en meme temps

  • Auteur de la discussion Auteur de la discussion sff
  • Date de début Date de début
WRInaute impliqué
Bonjour,

J'aimerais savoir si cela est possible de faire une requete avec ASC et DESC en même temps.

Fusionner ces 2 requetes :

$titre_frm = $mysql->query("SELECT titre, message, forum_id, id FROM ".$mysql->pref."_discussions WHERE message_id='$id' ORDER by id ASC LIMIT 1");
$row = mysql_fetch_assoc($titre_frm);

$titre_frm = $mysql->query("SELECT titre, message, forum_id, id FROM ".$mysql->pref."_discussions WHERE message_id='$id' ORDER by id DESC LIMIT 1");
$row = mysql_fetch_assoc($titre_frm);

Pouvez me dire si cela est possible ?
 
WRInaute impliqué
tu peux me montrer comment tu ferais avec UNION SELECT ?

Je comprends pas trop comment ca fonctionne.
 
WRInaute impliqué
Ce devrait me donner ceci si je comprend bien :

Code:
$titre_frm = $mysql->query("SELECT titre, message FROM ".$mysql->pref."_discussions WHERE message_id='1050' ORDER by id ASC UNION SELECT id, forum_id FROM ".$mysql->pref."_discussions WHERE message_id='1050' ORDER by id DESC");

Mais si je met à la suite :

$row = mysql_fetch_array($titre_frm);

ca me donne cette erreur :

Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in...

donc il y a quelques chose qui ne va pas.
 
WRInaute occasionnel
sff a dit:
J'aimerais savoir si cela est possible de faire une requete avec ASC et DESC en même temps.

Hello

ASC et DESC permettent d'indiquer l'ordre des résultats.
Tu ne peux pas classer tes résultats à la fois en ordre ascendant et descendant, alors qu'il s'agit de la même table.

à plus
 
WRInaute impliqué
bruno212 a dit:
sff a dit:
J'aimerais savoir si cela est possible de faire une requete avec ASC et DESC en même temps.

Hello

ASC et DESC permettent d'indiquer l'ordre des résultats.
Tu ne peux pas classer tes résultats à la fois en ordre ascendant et descendant, alors qu'il s'agit de la même table.

à plus

Dans son cas, si j'ai bien compris il aimerait récupérer le premier et dernier résultat d'une table donc SI c'est possible avec les unions comme ont lui à indiqué. Maintenant je suis d'accord que c'est pas possible sur la même table SAUF si on select 2 fois (d'où le union)
 
WRInaute occasionnel
screuscreu a dit:
Dans son cas, si j'ai bien compris il aimerait récupérer le premier et dernier résultat d'une table donc SI c'est possible avec les unions comme ont lui à indiqué. Maintenant je suis d'accord que c'est pas possible sur la même table SAUF si on select 2 fois (d'où le union)

Ah oui, juste, je n'ai pas fait attention au LIMIT.
 
WRInaute accro
Par défaut, les order by et limit s'appliquent à l'ensemble des résultats du union, donc ne peuvent pas être appliqués à chaque partie individuellement. Mais il suffit de mettre des paranthèses pour que ça marche.

Donc:

(select * from table order by id desc limit 1) union (select * from table order by id asc limit 1)

C'est d'ailleurs indiqué texto dans la doc

http://dev.mysql.com/doc/refman/5.0/en/union.html à partir de "To apply ORDER BY or LIMIT to an individual SELECT...". Lis bien jusqu'au bout, il y a un point important à noter :-)

Jacques.
 

➡️ Offre MyRankingMetrics ⬅️

pré-audit SEO gratuit avec RM Tech (+ avis d'expert)
coaching offert aux clients (avec Olivier Duffez ou Fabien Faceries)

Voir les détails ici

coaching SEO
Discussions similaires
Haut