Order by function

Résolu
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 - 22 sept. 2024 à 10:42
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 - 23 sept. 2024 à 18:19

Bonjour,

Soit une table SQL qui contient les colonnes X et Y.
Je peux les trier par X (croissant ou décroissant), Y ou les deux.

Est-il possible de trier sur base dune fonction de X et Y ?
par exemple Order by (X/Y)

Merci d'avance pour votre aide
Windows / Chrome 129.0.0.0

A voir également:

6 réponses

jee pee Messages postés 40453 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 novembre 2024 9 417
23 sept. 2024 à 09:34

Le développement informatique est ponctué de tests, d'échecs puis réussite. Il faut regarder la doc et essayer différentes syntaxes quand il n'y a pas d'exemple qui corresponde directement à ce que l'on souhaite. En plus le select est sans risque, ce n'est pas une instruction destructrice comme insert ou delete pour lesquelles on sera plus précautionneux.

"je parcours la table ... array", tu utilises un langage de programmation pour ton accès BDD ? comme Python, ou php ? dans ce cas, il faut utiliser à coté une fenêtre sql en mode ligne de commande pour tester les instructions. Le faire dans le programme est plus délicat, surtout quand la programmation des erreurs n'est pas impeccable, tu ne récupères alors pas le message d'erreur en retour d'une instruction qui échoue.


1
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 Ambassadeur 1 551
22 sept. 2024 à 20:21

bonjour,

c'est quoi cette fonction de X et Y?

qu'as-tu essayé?

quel résultat as-tu obtenu?

0
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 9
23 sept. 2024 à 09:16

La fonction peut être n'importe quelle opération entre les colonnes X et Y, par exemple f=X/Y, f=X+Y, F=X*Y, ...

Je n'ai rien essayé parce que je ne sais pas comment l'exprimer dans un Select ni même si c'est possible.

Ce que je fais actuellement :
je parcours la table, pour chaque row je calcule la fonction et je met la valeur dans un array
je trie l'array
je me demandais si on ne peut pas obtenir le même résultat directement à partir du Select.

0
jee pee Messages postés 40453 Date d'inscription mercredi 2 mai 2007 Statut Modérateur Dernière intervention 16 novembre 2024 9 417
22 sept. 2024 à 21:05

Bonjour,

Est-ce que select X, Y from table order by X/Y marche ? je ne sais pas, mais avant de poser la question tu as testé ? et quelle est la réponse ?

Moi si je teste et que cela ne fonctionne pas j'essaie select X, Y, X/Y as QUOT from table order by QUOT


0
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 9
23 sept. 2024 à 09:19

Je viens d'essayer select X/Y as QUOT : ça fonctionne.

Je vais voir comment je peux modifier mon query pour y inclure le tri.

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024
23 sept. 2024 à 10:12

Il n'est pas nécessaire d'ajouter la division dans le SELECT, tu peux trier ainsi:

SELECT x, y
FROM xy
order by x/y
0
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 9 > yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024
23 sept. 2024 à 10:57

ORDER BY X/Y ne fonctionne pas comme souhaité

il fait le tri sur X puis sur Y, pas sur X/Y

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551 > Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024
23 sept. 2024 à 11:43

Tu utilises vraiment le logiciel mysql?

Peux-tu partager la source SQL de ta requête?

0
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 9 > yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024
Modifié le 23 sept. 2024 à 12:18

J'utilise phpMyAdmin de mon serveur One.com

Y est un timestamp Unix

Voici un résultat : il trie sur X et non sur X/(Time-Y)

SELECT `X`,`Y` FROM `TesTable` WHERE ORDER BY (`X`/(".Time()."-`Y`)) DESC 
0
blux Messages postés 26473 Date d'inscription dimanche 26 août 2001 Statut Modérateur Dernière intervention 15 novembre 2024 3 316
Modifié le 22 sept. 2024 à 21:32

Salut,

le plus simple est d'ajouter une colonne où tu feras ton calcul et ensuite trier sur celle-ci.

select a,b,(x/y) as "new" from table1 order by 3 asc

<edit> doublon avec la réponse de jee pee...

0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 Ambassadeur 1 551
23 sept. 2024 à 12:58

peut-être ainsi?

SELECT `X`,`Y` FROM `TesTable` 
ORDER BY (`X`/(unix_timestamp()/86400-`Y`)) DESC
0
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 9
Modifié le 23 sept. 2024 à 15:17

Dans phpMyAdmin ceci fonctionne

SELECT X, Y FROM TesTable WHERE X <> 0
ORDER BY X/(unix_timestamp()-Y) DESC

Par contre en php

$sql = 'SELECT X, Y FROM TesTable WHERE X <> 0
ORDER BY X/(unix_timestamp()-Y) DESC';

donne Parse error: syntax error, unexpected identifier "BY"

0
yg_be Messages postés 23327 Date d'inscription lundi 9 juin 2008 Statut Contributeur Dernière intervention 15 novembre 2024 1 551
23 sept. 2024 à 16:03

On pase maintenant à la partie PHP.  Peut-être mieux de commencer un sujet dans le forum spécifique.

Peux-tu partager un peu plus de code, et le texte complet du message d'erreur?

0
Herve_be Messages postés 1066 Date d'inscription mercredi 4 août 2010 Statut Membre Dernière intervention 23 septembre 2024 9
23 sept. 2024 à 18:19

J'ai trouvé : il manque un espace devant ORDER.

Problème entièrement résolu, encore merci à tous les intervenants.

0