Aller au menu - Aller au contenu

[Plan du site] Vous êtes ici --- > Le Site du Zéro > Les forums > Site Web > PHP > Pb BDD ordonner les résultats affichés > Lecture du sujet

Pb BDD ordonner les résultats affichés

Vous devez être inscrit pour pouvoir poster des messages

RésoluLe problème de ce sujet a été résolu

Page : 1 
Auteur Message
1 visiteur sur ce sujet (1 anonyme)
Page : 1 
Hors ligne GG59 # Posté le 01/07/2008 à 16:03:49
Groupe : Membres
Bonjour à tous,

Je suis en train de réaliser une BDD en ligne, tout fonctionne correctement mise à part un petit détail:

Je souhaiterais pouvoir trier les résultats affichés par la recherche par ordre alphabétique par exemple.
Seulement quand je clique sur mes petites flèches (voir photo) je ne trie pas les résultats affiché mais je re-tri toute la BDD!!!
Image utilisateur
En gros ce que je veux, pour être un peu plus claire je prends un exemple:

Lorsque le visiteur fait une recherche dans ma BDD et qu'il trouve deux résultats,
les résultats sont affichés. Maintenant l'utilisateur veut les avoir dans l'ordre Ante-alphabétique, il clique sur la flèche
et les 2 résultats (en non pas toute la BDD) s'affiche dans le bon ordre.

Je ne vois pas comment faire pour que mon tri s'exécute uniquement sur les résultats que le visiteur a à l'écran ?
Si vous avez des pistes ;)

Merci.


Édité le 01/07/2008 à 16:05:58 par GG59
Hors ligne Squall124 # Posté le 01/07/2008 à 16:06:55
seul au monde
Avatar
Groupe : Membres
Salut,

Si tu peux, donne les quelques extraits de code concernés, sinon envoie moi un mp et je verrais si je peux t'aider.

co webmaster de Japan-mod.fr

14 à l'écrit, 12 à l'oral et 19 au TPE, facile le bac S en premiere :D
 
Hors ligne Onime no Kyo # Posté le 01/07/2008 à 16:14:29
UCBL Student !
Avatar
Groupe : Membres
Salut,
Faut voir si on peut faire un tri en JavaScript, sinon en Ajax c'est faisable, tu relances la même requête sauf que tu re-tris derrière ;)
Ex : on va dire que tu affiches 5 resultats ta requete est donc de la forme
Code : SQL
1
SELECT machin,truc,chose FROM qqpart WHERE biduletruc etc LIMIT 0,5;

alors tu fais un truc du genre
Code : SQL
1
SELECT * FROM (SELECT machin,truc,chose FROM qqpart WHERE biduletruc etc LIMIT 0,5)ORDER BY autreqqch;

Enfin apres je sais pas si c'est super optimisé, et j'ai pas testé donc ca se trouve ca marche pas XD

Image utilisateur
C'est ca etre hyperactif ? :D
 
Hors ligne GG59 # Posté le 01/07/2008 à 16:24:07
Groupe : Membres
Ouai ce qu'il y a c'est que j'ai pas mal de code, je vais essayer de sélectionner ce qui est utile:
Je n'utilise pas Javascript pour le site et pour moi Ajax est un produit d'entretien lol donc va falloir que je me renseigne un peu

Sinon je met mon code au cas ou vous trouveriez une solution miracle:
Code : SQL
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
20
if($_GET["surname_orderby"] == "desc")
{ 
$search=mysql_query("SELECT * FROM english WHERE
(surname LIKE '$_POST[surname]%' AND `first-name` LIKE '$_POST[first_name]%'ORDER BY surname DESC");
}
elseif($_GET["firstname_orderby"] == "asc")
{ 
$search=mysql_query("SELECT * FROM english WHERE
(surname LIKE '$_POST[surname]%' AND `first-name` LIKE '$_POST[first_name]%') ORDER BY `first-name` ASC");
}
elseif($_GET["firstname_orderby"] == "desc")
{ 
$search=mysql_query("SELECT * FROM english WHERE
(surname LIKE '$_POST[surname]%' AND `first-name` LIKE '$_POST[first_name]%') ORDER BY `first-name` DESC");
}
else
{ 
$search=mysql_query("SELECT * FROM english WHERE
(surname LIKE '$_POST[surname]%' AND `first-name` LIKE '$_POST[first_name]%')ORDER BY surname ASC");
}


Explication: Enfaite, ci-dessus je trie les résultat de ma BDD en fonction des variables $_GET que j'obtiens lorsque l'utilisateur clique sur un petits triangles:

Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<p>
<table class="tableau" border=1 width="700px">
<tr>

<td><a href="search.php?surname_orderby=asc"><img class="asc" src="../design/common/asc.jpg" align="right"></a>Surname<a href="search.php?surname_orderby=desc"><img class="desc"src="../design/common/desc.jpg"></a></td>

<td><a href="search.php?firstname_orderby=asc"><img class="asc" src="../design/common/asc.jpg" align="right"></a>First-name<a href="search.php?firstname_orderby=desc"><img class="desc"src="../design/common/desc.jpg"></a></td>

</tr>
</table>
</p>


Quand on peut le voir d'après les "href" si l'utilisateur clique sur un petit triangle alors je le dirige vers "search.php?surname_orderby=asc"
a partir de cette variable, je sais comment je dois trier mes résultats.

Le problème de se code est qu'a chaque fois je trie et réaffiche toute la BDD et non pas uniquement la partie qui intéresse l'utilisateur!
Édité le 01/07/2008 à 16:25:01 par GG59
Hors ligne Onime no Kyo # Posté le 01/07/2008 à 16:30:52
UCBL Student !
Avatar
Groupe : Membres
Citation : GG59
Le problème de se code est qu'a chaque fois je trie et réaffiche toute la BDD et non pas uniquement la partie qui intéresse l'utilisateur!
Tout a fait normal, regarde dans le truc que j'ai mis il y a un double select, un pour sélectionner les données et le second pour les trier.
Dans ton code l'order by que tu mets s'applique a tout les résultats, d'où la nécessité de sélectionner dans un premier temps les données et de faire le tri après.
Édité le 01/07/2008 à 16:32:58 par Onime no Kyo

Image utilisateur
C'est ca etre hyperactif ? :D
 
Hors ligne GG59 # Posté le 02/07/2008 à 10:05:41
Groupe : Membres
Ca ne marche pas, je n'avais pas pensais à faire un double SELECT et sur le papier ca à l'air pas mal mais lorsque je le fais j'obtiens une erreur (Warning: mysql_fetch_array(): supplied argument is not a valid MySQL result resource in ...). Je ne vois plus trop comment je peux me débrouiller.

Etant donné que j'enregistre mon premier résultat dans $search= SELECT * FROM '...';

Est-ce qu'il n'est pas possible après cette ligne de faire un truc du genre:
$search = SELECT * FROM $search ORDER BY surname ASC;
???
Édité le 02/07/2008 à 11:13:13 par GG59
Hors ligne GG59 # Posté le 07/07/2008 à 18:02:18
Groupe : Membres
Bon voila la solution trouvée pour les prochains qui auront le même PB:

Faire un double SELECT (=SELECT imbriqués = SELECT en cascade) n'est pas possible avec MySQL.

La solution pour ne pas me retrouver avec toutes les entrées de ma BDD retriées est d'utiliser non pas la methode POST dans mon formulaire de recherche mais la méthode GET (celle qui n'est pas décrit dans le tuto de M@teo21 c'est pourquoi je n'y avais pas pensé)
Ainsi tout les critères de recherches se retrouvent dans mon URL donc pour faire une recherche par nom decroissant par exemple je fais:

Dans le formulaire:
Code : PHP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
<form method="get" action="search.php?0">
	
		<fieldset>
		<p class="database">
		
		
		<input type="hidden" name="ordre" id="ordre" maxlength="1" value="ordre_asc"/>
		
		
		<label for="nom">Nom</label>:<input class="nom" type="text" name="nom" id="nom" maxlength="20"/>
		<br /><br />

		<label for="prenom">Prenom</label>:<input type="text" name="prenom" id="prenom" maxlength="20"/>
		<br /><br />


Dans la page ou je fais les recherches sur ma BDD:
Code : SQL
1
2
3
4
5
if($ordre == "nom_desc")
{
$select=mysql_query("SELECT * FROM MaTable WHERE
(nom LIKE '$nom%' AND prenom LIKE '$prenom%' ORDER BY nom DESC");
}

en sachant que j'obtiens $ordre, $nom, $prenom par grâce à mon URL!
Édité le 07/07/2008 à 18:04:09 par GG59

Retour au forum "PHP" ou à la liste des forums

Vous devez être inscrit pour pouvoir poster des messages

Changer de design | En savoir plus | Plan du site | Politique d'accessibilité | Règles | RSS tutoriels | RSS news
Édité par Simple IT SARL : Nous contacter | Notre blog | Revue de presse | Publicité

Y'a plus rien à lire, faut remonter maintenant !

Hébergement web - Correction de tutoriels - Créer un site
Vous souhaitez apparaître ici ? Contactez-nous.

Nombre de connectés 64 Zéros connectés | Requêtes SQL 7 requêtes | Temps de génération de la page : Total (SQL) 0.0355s (0.0172s)