[Résolu] Tri SQL

Note de ce sujet :
  • Moyenne : 0 (0 vote(s))
  • 1
  • 2
  • 3
  • 4
  • 5
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.10
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour,

Une petite question de tri en SQL. Mon ami Google ne veut pas me répondre correctement Wink


Je cherche a avoir le résultat dans cette ordre dans ma requete SQL :


Gardes
Histoire
9ème
25ème
31ème
48ème


Le meilleur résultat que j'ai réussit a obtenir est :

Histoire
Gardes
9ème
25ème
31ème
48ème
#1
Citation :#~~~~~ DEBUT BLOC A NE PAS SUPPRIMER ~~~~~
#~ Version du CMS: 1.11.10
#~ Url du site :
#~ Hébergeur / Soft : OVH
#~ Informations Système :
#~~~~~ FIN BLOC A NE PAS SUPPRIMER ~~~~~



Bonjour,

Une petite question de tri en SQL. Mon ami Google ne veut pas me répondre correctement Wink


Je cherche a avoir le résultat dans cette ordre dans ma requete SQL :


Gardes
Histoire
9ème
25ème
31ème
48ème


Le meilleur résultat que j'ai réussit a obtenir est :

Histoire
Gardes
9ème
25ème
31ème
48ème
#2
Ajoute un champs numérique dans ta table pour le tri, sans ça, tu n'y arriveras pas.
#2
Ajoute un champs numérique dans ta table pour le tri, sans ça, tu n'y arriveras pas.
#3
oui mais après je fais correspondre comment ? pour que l'utilisateur n'ai pas a trier lui-même...
#3
oui mais après je fais correspondre comment ? pour que l'utilisateur n'ai pas a trier lui-même...
#4
Admettons que tu appelles ce champs IdTri (attention de bien choisir INTeger comme type) et que le champs que tu souhaites afficher s'appelle Datas
Tu écris dans le champs IdTri :
1 dans l'enregistrement contenant Gardes
2 Histoire
3 9ème
4 25ème
5 31ème
6 48ème
et tu requêtes la bd pour afficher uniquement Datas, mais en triant sur IdTri (sans l'afficher).
Code :
SELECT Datas
FROM table
ORDER BY IdTri

C'est l'abc du langage sql, aussi je me demande si tu as donné tous les éléments pour répondre à ta question.
#4
Admettons que tu appelles ce champs IdTri (attention de bien choisir INTeger comme type) et que le champs que tu souhaites afficher s'appelle Datas
Tu écris dans le champs IdTri :
1 dans l'enregistrement contenant Gardes
2 Histoire
3 9ème
4 25ème
5 31ème
6 48ème
et tu requêtes la bd pour afficher uniquement Datas, mais en triant sur IdTri (sans l'afficher).
Code :
SELECT Datas
FROM table
ORDER BY IdTri

C'est l'abc du langage sql, aussi je me demande si tu as donné tous les éléments pour répondre à ta question.
#5
Bonjour,

oui effectivement il vous manque une donnée très importante qui est l'ajout via une base. Je vais donc plus détailler.
Aujourd'hui j'ai un utilisateur très très lambda sur l'entrée de données en Back end. Je risque d'en avoir plus dans un moment qui seront plus ou moins du même niveau. Je n'aurais pas trop de temps à passer derrière eux donc je cherche une solution plus pratique pour moi et sur un outil qu'eux maitrises plus.
En vue de la mise en forme des données actuel sur 90% des pages (Ancestramil). Je maitrise l'ajout des pages que l'utilisateur ne sait aussi pas faire. Je me suis dit que j'allais faire une balise que je mettrais sur chaque page. Un bon vieux fichier Excel avec 3 ou 4 champs à remplir sachant maitriser le reste des infos. L'utilisation Excel ou Open office pour mon utilisateur actuel et les autres à venir est bon car il maitrise bien l'outil, enfin pour l'utilisation dont j'ai besoin.
Quand il rentre une données, il insert une ligne pour qu'elle soit à la bonne place. Du coup j'ai besoin de classer.

Si je représente une page complexe :

Sous-titre
{balise page=pagealias sous-titre=sous-titre1}

Sous-titre
{balise page=pagealias sous-titre=sous-titre2}

etc...

Ma table :
Id, sous-titre, chemin du fichier, nom du fichier, texte à afficher, date d'entrée dans la base, date de modif, nom utilisateur.

Les champs de la fin seront utilisés quand j'aurais plus de temps pour leur faire un outil directement en page web de saisi/modif directement dans la table. J'avoue aussi que je préfère attendre un peu d'avoir un peu plus d'expérience dans la sécurisation de mon code pour éviter le risque d'injection et autres joyeuseté.

Je sais que je pourrais aussi optimiser la table au niveau du chemin du fichier avec une table secondaire ou le champ de liaison serait la pagealias mais ce n'est qu'un premier jet et je suis déjà coincé pour un banal tri.

J'ai vu que PHP me donne une fonction natsort() Trie naturel. J'étais en train de chercher dans cette direction car je ne voyais rien du côté SQL même si j'aurais préféré trouver une solution de ce côté-là.

Désolé pour le pavé.
#5
Bonjour,

oui effectivement il vous manque une donnée très importante qui est l'ajout via une base. Je vais donc plus détailler.
Aujourd'hui j'ai un utilisateur très très lambda sur l'entrée de données en Back end. Je risque d'en avoir plus dans un moment qui seront plus ou moins du même niveau. Je n'aurais pas trop de temps à passer derrière eux donc je cherche une solution plus pratique pour moi et sur un outil qu'eux maitrises plus.
En vue de la mise en forme des données actuel sur 90% des pages (Ancestramil). Je maitrise l'ajout des pages que l'utilisateur ne sait aussi pas faire. Je me suis dit que j'allais faire une balise que je mettrais sur chaque page. Un bon vieux fichier Excel avec 3 ou 4 champs à remplir sachant maitriser le reste des infos. L'utilisation Excel ou Open office pour mon utilisateur actuel et les autres à venir est bon car il maitrise bien l'outil, enfin pour l'utilisation dont j'ai besoin.
Quand il rentre une données, il insert une ligne pour qu'elle soit à la bonne place. Du coup j'ai besoin de classer.

Si je représente une page complexe :

Sous-titre
{balise page=pagealias sous-titre=sous-titre1}

Sous-titre
{balise page=pagealias sous-titre=sous-titre2}

etc...

Ma table :
Id, sous-titre, chemin du fichier, nom du fichier, texte à afficher, date d'entrée dans la base, date de modif, nom utilisateur.

Les champs de la fin seront utilisés quand j'aurais plus de temps pour leur faire un outil directement en page web de saisi/modif directement dans la table. J'avoue aussi que je préfère attendre un peu d'avoir un peu plus d'expérience dans la sécurisation de mon code pour éviter le risque d'injection et autres joyeuseté.

Je sais que je pourrais aussi optimiser la table au niveau du chemin du fichier avec une table secondaire ou le champ de liaison serait la pagealias mais ce n'est qu'un premier jet et je suis déjà coincé pour un banal tri.

J'ai vu que PHP me donne une fonction natsort() Trie naturel. J'étais en train de chercher dans cette direction car je ne voyais rien du côté SQL même si j'aurais préféré trouver une solution de ce côté-là.

Désolé pour le pavé.
#6
Quel est le rapport avec CMSms ce bricolage de base de données ?
J-C Etiemble v 2.2.xx
#6
Quel est le rapport avec CMSms ce bricolage de base de données ?
J-C Etiemble v 2.2.xx
#7
Aucun mais n'ayant pas trouvé de fil plus adapté, j'ai choisi général à moins que même le forum en lui-même ne puisse répondre à la demande et que je dois allez m'inscrire ailleurs ?
#7
Aucun mais n'ayant pas trouvé de fil plus adapté, j'ai choisi général à moins que même le forum en lui-même ne puisse répondre à la demande et que je dois allez m'inscrire ailleurs ?
#8
salut Xtra

je penses que tu es parti du mauvais côté...

Si j'ai bien suivit tu t'es créé une table mysql (quelle nom lui a tu donné) que tu souhaite requêter pour un affichage simple

Un tri sur une colonne se fait en mysql ainsi

Code :
Select * from table order by ma_colonne ASC  (ou DESC)

Cela te donnera un tri naturel comme on te l'a déjà montré + haut

Si ce tri naturel ne te convient pas, il va te falloir spécifier QUEL EST TON TRI. Et ça ne peux se faire qu'en PHP

Code :
function monTri($a, $b){
  //ecrire ton propre code de tri
}

usort(monTableauDeValeur, 'montri');

+ d'info : http://www.php.net/manual/fr/function.usort.php


Dans le cas ou tu nous le présente, ton tri n'est pas un tri nature : 0 -> 9 -> a -> Z
#8
salut Xtra

je penses que tu es parti du mauvais côté...

Si j'ai bien suivit tu t'es créé une table mysql (quelle nom lui a tu donné) que tu souhaite requêter pour un affichage simple

Un tri sur une colonne se fait en mysql ainsi

Code :
Select * from table order by ma_colonne ASC  (ou DESC)

Cela te donnera un tri naturel comme on te l'a déjà montré + haut

Si ce tri naturel ne te convient pas, il va te falloir spécifier QUEL EST TON TRI. Et ça ne peux se faire qu'en PHP

Code :
function monTri($a, $b){
  //ecrire ton propre code de tri
}

usort(monTableauDeValeur, 'montri');

+ d'info : http://www.php.net/manual/fr/function.usort.php


Dans le cas ou tu nous le présente, ton tri n'est pas un tri nature : 0 -> 9 -> a -> Z
#9
Je te conseil un code du type

Citation :fait une boucle de 1 à longueur de $a {

$var_a = $a[1]; //puis 2,3,4,...
$var_b = $b[1]; //puis 2,3,4,...

si $var_a est numerique et $var_b est numerique et $var_a égal à $var_b ==> continuer la boucle et ne pas continuer le reste du code ci dessous

si $var_a est numerique et $var_b est numerique ==> return ($var_a < $var_b) ? -1 : 1;
si $var_a est alpha et $var_b est alpha ==> return ($var_a < $var_b) ? -1 : 1;

//A ce stade, au moins un des deux est numérique et l'autre alpha assurement. Tu veux l'alpha en "premier"
si $var_a est numerique ==> return 1;

sinon return -1;

}


Je te fais pas tout le travail non plus, je te laisse coder ton php, ça devrait être bon avec cet algo.
#9
Je te conseil un code du type

Citation :fait une boucle de 1 à longueur de $a {

$var_a = $a[1]; //puis 2,3,4,...
$var_b = $b[1]; //puis 2,3,4,...

si $var_a est numerique et $var_b est numerique et $var_a égal à $var_b ==> continuer la boucle et ne pas continuer le reste du code ci dessous

si $var_a est numerique et $var_b est numerique ==> return ($var_a < $var_b) ? -1 : 1;
si $var_a est alpha et $var_b est alpha ==> return ($var_a < $var_b) ? -1 : 1;

//A ce stade, au moins un des deux est numérique et l'autre alpha assurement. Tu veux l'alpha en "premier"
si $var_a est numerique ==> return 1;

sinon return -1;

}


Je te fais pas tout le travail non plus, je te laisse coder ton php, ça devrait être bon avec cet algo.
#10
J'étais en train de coder du côté PHP comme Bess me le conseillé mais en utilisant la fonction natsort() quand j'ai fait une dernière tentative googolienne en me disant que pourquoi MySQL serait moins puissant que PHP dans ce domaine. J'ai enfin trouvé cet ordre de tri Big Grin
La solution pour les prochains camarades.

SELECT * FROM table ORDER BY (champ+0), champ ASC

Comme quoi la solution n'était pas très compliquée. Mais comme me dit souvent un copain, mieux vaut un con qui sait que 10 intelligents qui cherche. Smile
#10
J'étais en train de coder du côté PHP comme Bess me le conseillé mais en utilisant la fonction natsort() quand j'ai fait une dernière tentative googolienne en me disant que pourquoi MySQL serait moins puissant que PHP dans ce domaine. J'ai enfin trouvé cet ordre de tri Big Grin
La solution pour les prochains camarades.

SELECT * FROM table ORDER BY (champ+0), champ ASC

Comme quoi la solution n'était pas très compliquée. Mais comme me dit souvent un copain, mieux vaut un con qui sait que 10 intelligents qui cherche. Smile
#11
Pour éviter tout problème de tri (histoire sera placé avant Gardes), tu devrais formater le premier caractère en majuscule en php avec $foo = ucfirst($foo);
#11
Pour éviter tout problème de tri (histoire sera placé avant Gardes), tu devrais formater le premier caractère en majuscule en php avec $foo = ucfirst($foo);
#12
Je ne remarque pas le problème dans ma table sur mon poste de test. Je vais quand même suivre le conseil car début de phrase donc ne peut faire de mal. J'éviterais une erreur de saisie en plus et en cas de différence quand je mettrais sur le serveur définitif le problème ne se présentera pas.
Je te remercie toi et Bess pour le temps que vous avez consacré à essayer de me trouver une solution.
#12
Je ne remarque pas le problème dans ma table sur mon poste de test. Je vais quand même suivre le conseil car début de phrase donc ne peut faire de mal. J'éviterais une erreur de saisie en plus et en cas de différence quand je mettrais sur le serveur définitif le problème ne se présentera pas.
Je te remercie toi et Bess pour le temps que vous avez consacré à essayer de me trouver une solution.


Atteindre :


Utilisateur(s) parcourant ce sujet : 1 visiteur(s)