Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
3004 connectés 

  FORUM HardWare.fr
  Programmation

  [php mySQL] ! ptit problème avec select distinct et order by

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php mySQL] ! ptit problème avec select distinct et order by

n°86105
k666
dites non à petitmou
Posté le 04-01-2002 à 16:05:23  profilanswer
 

j'effectue la requête suivante qui devrait me donner la liste de posts différents ordonnés par date décroissante:
 
$msgs = mysql_query("select distinct post from msg where ( cat = '".$cat."' ) order by date desc limit 0,10" );
 
le problème est que le "distinct" nique mon order by,
savez vous comment je pourrais faire?
 
merci :jap:

 

[edtdd]--Message édité par k666--[/edtdd]

mood
Publicité
Posté le 04-01-2002 à 16:05:23  profilanswer
 

n°86107
k666
dites non à petitmou
Posté le 04-01-2002 à 16:10:26  profilanswer
 

raaaaaaaaahhhhhhhhhhhhh
 
 
exemple de valuers de ma base:
 
 
post  login  cat  titre  contenu  params  date  
359   azeaze   2   segundo mensaje posteado   texto del segundo      2002-01-04 15:47:44  
358   killer   2   testeando categoria 2   asi es, testeando, para variar conio!!!      2002-01-04 15:46:50  
1   kpoman   1   salut!!!   salut, ouverture de cette section du forum! sympa quoi      2002-01-04 12:55:24  
359   saraba   2   cool   cooooool man      2002-01-04 15:48:34  
358   sisisi   2   cataclismo   asi es loco, fiera, azeaze      2002-01-04 15:50:37
 
 
et quand je fais select distinct post from msg where cat = 2 order by date desc
 
et bin, il me sort 359 avant 358, or le dernier message posté pour 358 est plus noovo que pour 359
 
la clause distinct s'applique avant ma clause order by, et c vraiment pas cool!!!!
comment pourrais je contrer le blème?

 

[edtdd]--Message édité par k666--[/edtdd]

n°86135
k666
dites non à petitmou
Posté le 04-01-2002 à 17:53:10  profilanswer
 

et un ptit up!!
à ceux qui n'auraient pas compris mon problème, dites le moi!

n°86173
Bruce
Music 4 your ears!
Posté le 04-01-2002 à 19:30:35  profilanswer
 

Normal, tu as mis DESC !!! DESC = Décroissant !


---------------
A+++ Bruce - http://www.bheller.com
n°86175
Bruce
Music 4 your ears!
Posté le 04-01-2002 à 19:31:08  profilanswer
 

Aussi, petit conseil d'écriture, écrit bien les commandes SQL en majuscules c plus lisible ensuite !


---------------
A+++ Bruce - http://www.bheller.com
n°86188
Mara's dad
Yes I can !
Posté le 04-01-2002 à 19:53:24  profilanswer
 

Autres petit détails :
Les parenthèses ne servent à rien dans ton cas,
Quand ta chaîne est délimitée par des guillemets doubles, les variables sont interprètées.
DONC :  
"select distinct post from msg where ( cat = '".$cat."' ) order by date desc limit 0,10"
 
devient :
 
"SELECT DISTINC post FROM msg WHERE cat = '$cat' ORDER BY date DESC LIMIT 0,10"


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°86335
k666
dites non à petitmou
Posté le 05-01-2002 à 10:49:09  profilanswer
 

c normal que j'ai mis DESC paske je veux le plus récent posteur tout en haut, d'abord! un peu comme ici sur hardware!!
et c pour ça que ma clause distinct est gênante!
paske je veux choisir Dix POSTS DIFFERENTS par ordre décroissant de dates!!!
sil vous plait!!! aidez moi!
 
(sinon pour les parenthèses j'ai oublié de les enlever paske j'avais un AND)
 
merci de m'éclairer!

n°86359
Mara's dad
Yes I can !
Posté le 05-01-2002 à 12:27:39  profilanswer
 

Je ne comprends pas ! ! !
 
Et avec un GROUP BY au lieu du distinct, çà fait quoi ?
 
"SELECT post FROM msg WHERE cat = '$cat' GROUP BY post ORDER BY date DESC LIMIT 0,10"


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°86388
massanu
Posté le 05-01-2002 à 13:51:50  profilanswer
 

et comment ca se fait que tes posts est des numero identiques parfois ?


---------------
Oui je sais, je suis une merde en orthographe et alors ? Altcoin list: https://docs.google.com/spreadsheet [...] =286417424
n°86403
Mara's dad
Yes I can !
Posté le 05-01-2002 à 15:18:36  profilanswer
 

A mon avis, il a une seule table avec tout dedans !
Donc pour lister les différents topics...


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
mood
Publicité
Posté le 05-01-2002 à 15:18:36  profilanswer
 

n°86435
PaLoTTe
Posté le 05-01-2002 à 18:05:48  profilanswer
 

Mara's dad a écrit a écrit :

A mon avis, il a une seule table avec tout dedans !
Donc pour lister les différents topics...  




 
c ce ke j'ai moi, 1 table avec tous les posts pr mon forum

n°86475
k666
dites non à petitmou
Posté le 05-01-2002 à 22:04:40  profilanswer
 

oué bah c ça que tu dis
 
g tout dans une table ;)
 
et c vrai que j'avais pas pensé au group by et donc je gagne en requêtes car après je faisais un select * pour chacun des pots
et oué, c ça, en fait "post" = "sujet" et pour chaque post ya plein de réponses différentes ordonnées par date de postage pour un post donné !!!
je vais essayer avec le group by mecs, c vraiment sympa de votre part !

n°86503
Bruce
Music 4 your ears!
Posté le 06-01-2002 à 04:30:45  profilanswer
 

Tout dans une table ? Comment utiliser les bases de donner sans rien y comprendre...
 
Désolé mais c vrais, tout l'intéret de bases est de regrouper les données qui vont ensemble et séparer celles qui sont complémentaires...
 
Bref plustot que d'essayer des requettes SQL compliquées (et plus lourdes à l'exécution !) fait plusieures tables et utilise des requettes avec jointures...


---------------
A+++ Bruce - http://www.bheller.com
n°86524
k666
dites non à petitmou
Posté le 06-01-2002 à 12:31:07  profilanswer
 

tu veux que je crée une table différente par catégorie de forum???
paske des tables différentes j'en ai!
regarde: j'ai:
 
table actions
table msg
table users
 
tu proposes quoi de mieux?

n°86526
k666
dites non à petitmou
Posté le 06-01-2002 à 12:33:46  profilanswer
 

mais sinon chuis prenant pour un bon cours, bien résumé, sur projections et relations de tables....:D

n°86534
Mara's dad
Yes I can !
Posté le 06-01-2002 à 13:03:38  profilanswer
 

A vue de nez :
Tables : categories, topics, posts, users
 
C'est déjà mieux non !


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°86629
k666
dites non à petitmou
Posté le 07-01-2002 à 10:21:33  profilanswer
 

mais c ça que je comprends pas, pourquoi c mieux????
j'ai l'impression que c du découpage que pour découper...
quel est l'intérêt de forcéent mettre des trucs dans d'autres tables?
 
pour topic, je suis d'accord:
en effet, je réserve une place pour le titre de CHAQUE message, or il n'ya de titre que dans le premier message d'un topic donné, donc là, je pige, ya une perte d'espace, dû à une grande qté de champs vides,
mais esque ça justifie de le mettre dans une autre table???
 
et d'ailleurs, pourquoi créer une table catégories, alors qu'il n'yaura a priori que une petite dizaine de catégories??? il yaura dans ce cas toute une série de reqûetes inutiles car faites sur 10 lignes? ne serait-ce pas mieux de créer une constante/tableau à include(r) dans les fichiers de bdd?
 
voilà,
pourquoi tout splitter en fin de compte?

n°86630
darklord22
Nightwish rulezzzzzzzzzzzzz
Posté le 07-01-2002 à 10:25:44  profilanswer
 

C'est vrai que spliter tout n'est pas forcément la meilleure idée mais n'oublie pas que ca te permets:
 
1) De faire des requêtes isolées
2) D'otptimiser l'espace disque
3) D'optimiser les recherches
 
A+


---------------
What is popular is not always right, what is right is not always popular :D
n°86633
Mara's dad
Yes I can !
Posté le 07-01-2002 à 10:47:23  profilanswer
 

Pour les catégories, par exemple la réponse est simple et évidente !
Ca te permet d'en ajouter sans avoir une seule ligne de code à modifier !
 
Il n'y a pas de raison que celà ajoute beaucoup de requêtes.
Je vois celle qui permet de lister les catégories, et c'est à peu près tout pour ce qui est de l'utilisation habituelle du forum !

 

[edtdd]--Message édité par Mara's dad--[/edtdd]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°86709
k666
dites non à petitmou
Posté le 07-01-2002 à 14:55:26  profilanswer
 

euh;
au fait c le même problème qu'avant avec group by,
qd il projette sur le group by (ou avant, le distinct) bin il court circuite le order by date desc....
quelqun a til une idée?

n°86733
Bruce
Music 4 your ears!
Posté le 07-01-2002 à 15:55:29  profilanswer
 

Pkoi séparer les tables ? Ben c un peu la base de la logique des bases justement...
 
Tu peut faire une table catégorie, une autre utilisateurs, enfin une troisième message (cela serait même plus propre de faire une table des sujets mais bon, c pas obligé car tu peut ajouter un booléen sur un des champs de ta table message...).
 
Une bonne organisation serait :
 
Table Catégorie :
Cat_id : entier unique, identifiant, nécéssaire.
Cat_Nom : chaine de caratères, nom de la catégorie, nécéssaire.
Cat_Desc : chaine de caractères, description de la catégorie.
 
Table Utilisateur :
Util_id : entier unique, identifiant, nécéssaire.
Util_login : chaine de caractères, login de l'utilisateur, nécéssaire et unique !
Util_pass : chaine de caractères, mot de passe de l'utilisateur, nécéssaire. A crypter pour plus de sécurité (merci MD5 ! :)).
 
(tu peut rajouter d'autres info utilisateur tel que son site web, son adresse mail...). On aurrai put mettre Util_login en identifiant mais c plus long de gérer et comparer des string que des nombres...
 
Table Messages :
Message_id : entier unique, identifiant, nécéssaire.
Message_titre : chaine de caractères, titre du sujet du message, nécéssaire.
Message_cat : entier, identifiant de la catégorie du message, nécéssaire.
Message_user : entier, identifiant de l'utilisateur, nécéssaire.
Message_sujet : entier, si le numéro = 0 alors c un sujet, sinon, tu y met le numéro du sujet auquel tu répond...
Message_dateheure : date heure, nécéssaire, important :)
 
Voilà grosso-modo comment faire un début de base de forum clean...
 
Pour les requettes tout deviens simple alors :
Afficher la liste des catégories :
SELECT * FROM Categorie;
 
(tu peut rajouter un numéro d'ordre à tes catégories pour  pouvoir changer l'ordre, il suffira alors d'ajouter un ORDER BY Categorie_order).
 
Afficher la liste des sujets d'une catégorie :
SELECT * FROM Messages WHERE Message_cat=x AND Message_sujet=0 ORDER BY Message_dateheure DESC;
 
Afficher la liste des messages et réponses d'un sujet :
SELECT * FROM Messages WHERE Message_ID=x OR Message_sujet=x ORDER BY Message_dateheure DESC;
 
Pas dur hein ;)


---------------
A+++ Bruce - http://www.bheller.com
n°86734
Bruce
Music 4 your ears!
Posté le 07-01-2002 à 15:56:11  profilanswer
 

J'ta fait ça rapide, il y as peut-être une ou deux erreurs dans les exemples de requetes mais l'esprit y est ;)


---------------
A+++ Bruce - http://www.bheller.com
n°86738
k666
dites non à petitmou
Posté le 07-01-2002 à 16:02:04  profilanswer
 

merci mec c très gentil de ta part :)
j'avais pas pensé au système du champ supplémentaire à 0 si noovo topic ou à n_topic si réponse à ;)
merci je vais l'implémenter tout de suite!
 
mais!!!!!!
 
par contre, ça répond pas à ma question de départ, qui est: comment faire la fameuse requête dont je parlais?
 
 
 
 

 
exemple de valuers de ma base:  
 
 
post  login  cat  titre  contenu  params  date    
359   azeaze   2   segundo mensaje posteado   texto del segundo      2002-01-04 15:47:44    
358   killer   2   testeando categoria 2   asi es, testeando, para variar conio!!!      2002-01-04 15:46:50    
1   kpoman   1   salut!!!   salut, ouverture de cette section du forum! sympa quoi      2002-01-04 12:55:24    
359   saraba   2   cool   cooooool man      2002-01-04 15:48:34    
358   sisisi   2   cataclismo   asi es loco, fiera, azeaze      2002-01-04 15:50:37  
 
 
et quand je fais select distinct post from msg where cat = 2 order by date desc  
 
et bin, il me sort 359 avant 358, or le dernier message posté pour 358 est plus noovo que pour 359  
 
la clause distinct s'applique avant ma clause order by, et c vraiment pas cool!!!!  
comment pourrais je contrer le blème?  
 

n°86741
Bruce
Music 4 your ears!
Posté le 07-01-2002 à 16:07:45  profilanswer
 

Tu as un gros pb de base ! Tu n'as pas d'identifiant valide ! En effet tu as plusieurs fois le même numéro de post... Ne t'attend donc pas à un résultat fiable... C pas le DISTINCT ou le ORDER BY qui marchent mal là !


---------------
A+++ Bruce - http://www.bheller.com
n°86745
k666
dites non à petitmou
Posté le 07-01-2002 à 16:14:03  profilanswer
 

bin c pas un identifiant unique, c clair,
j'utilise ce numéro pour savoir à quel topic ça appartient, et il est en incrément automatique, donc si je poste kek chose sans fournir de numéro, il en choisit un tout seul,
mais tu es totalement sûr que c'est à cause de ça que casse mon order by????

n°86748
Bruce
Music 4 your ears!
Posté le 07-01-2002 à 16:18:40  profilanswer
 

Il FAUT un identifiant unique par table... C une rêgle d'or !


---------------
A+++ Bruce - http://www.bheller.com
n°86841
Mara's dad
Yes I can !
Posté le 07-01-2002 à 20:05:18  profilanswer
 

Le problème n'est pas un identifiant unique !
C'est sûr que c'est mieux, mais dans le cas de K666, on peut considérer que Numéro de post + DateHeure constitue un identifiant.
 
En fait ce que tu veux, c'est pour chaque numéro de post, avoir le DERNIER post, donc le order by, il peux rien pour toi (il est fait après le group by ) !
 
Ce qu'il te faut c'est : (Testé ET approuvé avec tes données ! ! !)
"SELECT post, max(date) AS dt FROM msg WHERE cat='$cat' GROUP BY post ORDER BY dt DESC LIMIT 0,10"  
 
En fait, avec le group by, ou le distinct (c'est pareil), il prends la première ligne qui va bien, donc en fait c'est les 2 première lignes de ta table.

 

[edtdd]--Message édité par Mara's dad--[/edtdd]


---------------
Laissez l'Etat dans les toilettes où vous l'avez trouvé.
n°86843
k666
dites non à petitmou
Posté le 07-01-2002 à 20:14:18  profilanswer
 

c exactement ce que je cherchais :) :)
 
merci bokoo mara ;)
 
au fait tu peux m'appeler killer (pour k666 :lol: )
 
merci bokoo :) et @ bientôt!

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation

  [php mySQL] ! ptit problème avec select distinct et order by

 

Sujets relatifs
[WEFT-.EOT] Problème d'incorporation de police ...[PHP / MySQL] Mon 1er script ...
Architecture des MACHINES probleme[ visual Basic ] problème de base de BDD.
mySQL et les forums ...Probleme de 'passage' de variable en javascript
[c++] petite question sur les pointeurs (pas un problème)probleme en HTML ??? besoin d'aide svp
[MYSQL PHP] Requete ne renvoyant qu'1 champ, optimisation du code.Hébergeur PHP 4 & MySQL gratuit à l'étranger
Plus de sujets relatifs à : [php mySQL] ! ptit problème avec select distinct et order by


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR