Tri de donnée MYSQL

Fermé
falcor Messages postés 61 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 26 mai 2009 - 15 mai 2008 à 09:33
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 - 15 mai 2008 à 15:54
Bonjour,

Je reste coincé sur un souci de tri des données MYSQL. Mon but et de pouvoir trier par ordre de mon champs Id_page (1.2.3.4 etc.…) mais rien n’y fait avec ORDER BY Id_page cella m’affiche tous les menu fille et sœur dans un ordre tout sauf classé.

Si quelqu’un à une idée. Merci d’avance.

function affiche_menu($idpage) {
// Sélectionne toutes les pages filles de la page en cours
$strSQL = 'SELECT `Id_page`, `Titre` FROM `pages` WHERE `Id_parent` = '.$idpage;
$resultat = requete_SQL($strSQL);
// Si la page n'a pas de page fille, alors on modifie la requète pour obtenir ses pages soeurs.
if (mysql_num_rows($resultat) == 0) {
$strSQL = 'SELECT `Id_page`, `Titre` FROM `pages` WHERE `Id_parent` = '.$_ENV['id_parent'];
$resultat = requete_SQL($strSQL);
}
$menu_retour = '<ul>';
while ($tabl_result = mysql_fetch_array($resultat)) {
$menu_retour .= '<li>';
$menu_retour .= '<a href="index.php?id_page='.$tabl_result['Id_page'].'">';
$menu_retour .= $tabl_result['Titre'];
$menu_retour .= '</a>';
$menu_retour .= '</li>';
}
$menu_retour .= '</ul>';
return $menu_retour;
}

4 réponses

ygalr22 Messages postés 23 Date d'inscription jeudi 20 décembre 2007 Statut Membre Dernière intervention 24 septembre 2008 2
15 mai 2008 à 15:10
Tu as essayé comme ca?

$strSQL = 'SELECT `Id_page`, `Titre`
FROM `pages`
WHERE `Id_parent` = '.$idpage
ORDER BY `Id_page` ASC;

ASC-> Ordre croissant
DESC -> Ordere Décroissant
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 mai 2008 à 15:12
t'as sélectionné que Id_page et titre, mais tu fais un tri via Id_parent, il faut que tu le mettes dans ta requête celui ci aussi
0
falcor Messages postés 61 Date d'inscription mercredi 28 avril 2004 Statut Membre Dernière intervention 26 mai 2009 2
15 mai 2008 à 15:43
Merci pour vos réponses.

J’ai testé les deux solutions.

Celle de Ygalr22 me donne une erreur.

Même en rajoutant dans ma sélection Id_parent l’affichage de mes menus sur mon index.php (menu et sous menu) cela m’affiche touts les liens en même temps sur les deux menus et dans un ordre tout sauf trié.
----------------------------------------------
function affiche_menu($idpage) {

// Sélectionne toutes les pages filles de la page en cours

$strSQL = 'SELECT `Id_page`, `Titre`, `Id_parent` FROM `pages` WHERE `Id_parent` ORDER BY `Id_page` = '.$idpage ;
$resultat = requete_SQL($strSQL);

// Si la page n'a pas de page fille, alors on modifie la requète pour obtenir ses pages soeurs.

if (mysql_num_rows($resultat) == 0) {
$strSQL = 'SELECT `Id_page`, `Titre`, `Id_parent` FROM `pages` WHERE `Id_parent` ORDER BY `Id_page` = '.$_ENV['id_parent'];
$resultat = requete_SQL($strSQL);
}
.......
_______________________________________

Si je mets pas ORDER BY tout fonctionne sauf qu’évidemment mes liens ne sont pas dans l’ordre voulu.

Mon index.php

$id_page_accueil = 1;

// Si non défini, on considère que la page est la page d'accueil

if (isset($_GET['id_page'])) {
$_ENV['id_page'] = intval($_GET['id_page']);
} else {
$_ENV['id_page'] = $id_page_accueil;
}

<div id="menu_horizontal">
<?php

// Affiche le menu 'racine' => id de la page = id de la page d'accueil = 1

echo affiche_menu($id_page_accueil);
?>
</div>
<div id="menu_vertical">
<?php
// Affiche le menu en cours => id de la page = id de la page en cours.

if ($_ENV['niveaux'] > 0)
{
echo affiche_menu($_ENV['id_page']);
}
?>
</div>

________________________________________

Encore merci pour le coup de pouce
0
Smoking bird Messages postés 870 Date d'inscription mardi 11 mars 2008 Statut Membre Dernière intervention 10 juillet 2011 58
15 mai 2008 à 15:54
Where te permet de faire des comparaisons pour savoir quoi sélectionner ;) et order by te dit à partir de quel champ tu peux les trier, donc en principe tu fais pas de comparaisons dans order by, mais que dans where.

$strSQL = "SELECT Id_page, Titre, Id_parent FROM pages ORDER BY Id_page ASC " ;

== "sélectionner les id des pages, leur titre, et les id parents, de la table page, les trier en fonction des id pages dans un order croissant"

Je comprends pas très bien l'organisation de tes tables en fait ^o) ceci dit à ce que j'en capte, le where te permet de faire une sélection plus précise, mais pour qu'il fonctionne bien, fait une comparaison^^
0