Tri de donnée MYSQL
falcor
Messages postés
61
Statut
Membre
-
Smoking bird Messages postés 911 Statut Membre -
Smoking bird Messages postés 911 Statut Membre -
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;
}
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;
}
A voir également:
- Tri de donnée MYSQL
- Comment faire un tri personnalisé sur excel - Guide
- Logiciel tri photo - Guide
- Mysql community download - Télécharger - Bases de données
- Effacer les données de navigation sur android - Guide
- Service de diffusion de données - Forum TNT / Satellite / Réception
4 réponses
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
$strSQL = 'SELECT `Id_page`, `Titre`
FROM `pages`
WHERE `Id_parent` = '.$idpage
ORDER BY `Id_page` ASC;
ASC-> Ordre croissant
DESC -> Ordere Décroissant
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
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
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
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^^
$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^^