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

  FORUM HardWare.fr
  Programmation
  PHP

  [php / mysql] Numéros de page et tri sur champ date

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[php / mysql] Numéros de page et tri sur champ date

n°1678423
Gat$
http://www.wowteamfinder.com
Posté le 29-01-2008 à 12:04:00  profilanswer
 

Bonjour à tous,
 
J'ai un petit soucis que je n'arrive pas a résoudre de moi-même, malgrés pas mal de recherche sur le net, donc je crack je poste :(
 
En fait j'ai une table de news qui contient des newsletters.
 

Table news :
 
id
date_news
titre
etc...


 
Lorsque quelqu'un ajoute une nouvelle news le champ date news est garni par defaut avec la date actuelle.
 
J'ai fait un systeme de pagination qui permet de ne pas avoir 25.000 news sur la même page...
j'affiche donc 10 news par page.
 
Ce que j'essaie de faire  :
 
Je voudrais a la simple connaissance de l'identifiant ID de la news, connaitre son numéro de page.
En principe je n'ai pas ce genre de probleme, car généralement a l'affichage je trie sur un champ unique.  
Mais la il ya le probleme que plusieurs news peuvent avoir la meme date.
 
Donc si je compte le nombre d'enregistrement dont la date est < que la news concernée, ca va me retourner un nombre d'enregistrement érroné (du moins de temps en temps).
Il faut savoir que la date de la news est modifiable par le client (il s'agit d'un cms) donc un ID supérieur a un autre peut avoir une date inférieure etc...
 
Donc voila je ne vois pas trop comment gérer la bête, j'ai tenté de voir du coté de mysql si il y avait une fonction ou opérateur permettant de connaitre la position exacte qu'aura un enregistrement lors d'un select (avec les conditions) un peu dans l'idée de MYSQL_CALC_FOUND_ROWS même si c'est pas tout a fait ca
 
Des idées ?
 
Merci d'avance tlm
 
Gat$


Message édité par Gat$ le 29-01-2008 à 13:11:07
mood
Publicité
Posté le 29-01-2008 à 12:04:00  profilanswer
 

n°1678464
Gat$
http://www.wowteamfinder.com
Posté le 29-01-2008 à 12:49:02  profilanswer
 

A mon avis j'ai pas du etre très clair ^^'
Voici un exemple
 
On affiche 2 news par page max avant de passer a la page suivante .
 
Enregistrement :
 


ID | date       | titre
------------------------
1  | 2005-01-01 | News D
2  | 2005-01-02 | News B
3  | 2005-01-03 | News C
4  | 2005-01-01 | News A
5  | 2005-01-01 | News E


 
A l'affichage on trie les resultats sur le champ "date"
 

... ORDER BY date DESC


 
Sur la premiere page on devrait voir la News B & C
 
Sur la seconde ca devient problématique du fait que les news A, D et E ont la meme date. Comment savoir si sur la page 2 nous auront A & D ou A & E ou encore E & D ?
Comment savoir rien qu'en ayant l'ID de la news D par exemple si elle sera sur la page 2 oU 3 ? Sans pondre un truc tout dégueu sur php ...
 
La fonction Mysql DE rêve serait :
 

SELECT Get_Record_Position("news", "id=1", "date DESC" ) AS pos


 
Argument 1 : Table utilisée
Argument 2 : ID de l'enregistrement
Argument 3 : Ordre de tri qu'on utiliserait
 
Biensur c'est un beau reve mais c'est pour illustrer ce que je voudrais faire le plus simplement possible
 
Si date etait un champ unique ca ne poserait aucun probleme, mais comme c'est pas le cas,...
 
Gat$


Message édité par Gat$ le 29-01-2008 à 12:58:04
n°1678503
leflos5
On est ou on est pas :)
Posté le 29-01-2008 à 14:21:16  profilanswer
 

Ca n'existe pas et c'est bien le problème de tous les systèmes de pagination: arriver à définir la position de l'index sans pour autant tout recalculer à chaque fois.
 
Et d'ailleurs tu le devines comment toi ton id à partir duquel tu veux tes enregistrement puisque l'ordre du tri et l'ordre des ID ne doit pas influer dans un tel système :??:
 
Enfin sans parler de performances il y a le limit de mysql sinon http://www.nexen.net/articles/doss [...] _limit.php
 
 
 
 

n°1678527
Gat$
http://www.wowteamfinder.com
Posté le 29-01-2008 à 15:07:13  profilanswer
 

Je dois pouvoir connaitre quel sera le numero de page rien qu'avec l'id, pourquoi ? Simple, j'ai un moteur de recherche intégrés au site.
 
Lorsque les resultats apparaissent il ya un liens qui mene vers le contenu complet, et je dois pouvoir prevoir le n° page afin que lorsqu'on click sur le liens on arrive a coup sur sur la page qui contient le contenu recherché...
 
Donc si parmis les resultats il ya une news qui a pour date 2005-01-01 (non unique) comment savoir comment  MySQL va trier les resultats avec une meme date ?  
 
On aurait pu imaginer qu'un id supérieur a un autre soit automatiquement plus rescent qu'un autre hors ce n'est pas le cas dans mon cas de figure.
 
La news ayant l'ID n° 10 et une date 2005-01-01 sera plus ancienne que  la news ayant l'id n°5 et une date 2006-01-01 (je me doit d'envisager cette posibilité car le client peut modifier la date des news)
 
merci pour ta réponse ;)
 
D'autres idée ?
 
Gat$


Message édité par Gat$ le 29-01-2008 à 15:15:36
n°1678542
NewsletTux
&lt;Insérez ici votre vie /&gt;
Posté le 29-01-2008 à 15:26:29  profilanswer
 

Bin sinon pour MySQL il te retournera les valeurs selon l'ordre d'entrée ...
p.ex. tu rentres 3 news le même jour, (le coup des B, D et E) si tu n'en affiches que 2 par page, les 2 affichées puisqu'elles sont à égalité sur le critère de tri seront retournées dans leur ordre d'insertion dans la base. Mais je ne sais pas si c'est un comportement par défaut ou modifiable, c'est un constat perso.


---------------
NewsletTux - outil de mailing list en PHP MySQL
n°1678599
Gat$
http://www.wowteamfinder.com
Posté le 29-01-2008 à 16:08:46  profilanswer
 

Le prob c'est que c'est pas assez fiable, que se passe-t-il si on a plei nde DELETE , UPDATE etc... ou si on dump la base pour la recreer ailleur ? L'indexe ne sera ptete pas le meme

n°1678606
leflos5
On est ou on est pas :)
Posté le 29-01-2008 à 16:25:40  profilanswer
 

Mais quel est ton problème en fait :??:
 
Tu ordonnes par date, t'as ton ordre :spamafote:

n°1678683
Gat$
http://www.wowteamfinder.com
Posté le 29-01-2008 à 17:57:42  profilanswer
 

leflos5 a écrit :

Mais quel est ton problème en fait :??:
 
Tu ordonnes par date, t'as ton ordre :spamafote:


 
 :cry: j'arrive pas a m'expliquer correctement :(
 
Le prob n'est pas l'affichage des news, ca c'est pas un probleme.
 
- Les news sont triée par date ordre decroissant (les plus rescente en premier
- Il peut y avoir plusieurs news ayant la meme date
- La date est modifiable par l'utilisateur a volonté
- On affiche 10 news par page
 
Jusque la pas de probleme..
 
- J'ai ajouté un champs recherche qui recherche de toute dans le site dont des news
- Mon probleme est que dans le cas ou il y a plusieurs news qui ont une meme date, la recherche risque de ne pas choisir la bonne page dans la quelle se trouve la news du fait qu'on ne sait pas comment mysql va trier des news de meme date
 
En language SQL ca donne :  
 
Affichage des news suivant la page :  

SELECT * FROM news ORDER BY date DESC LIMIT ($cur_page-1) * $nb_resultat_par_page, $nb_resultat_par_page;


 
Dans la recherche si une news est trouvé correspondant a certain mot clé, on recupère l'ID de cette news. Mettons ID=3. Pour trouver la page qui correspond a cette news je fait comme ceci :  
 
On recupere les infos de la news trouvée :

SELECT * FROM news WHERE id=3


 
On a donc la date de la news, sur base de la date on cherche le numero de page ou la news est sencée se trouver

SELECT COUNT(*) AS nb_news FROM news WHERE date <= $news_data['date'] AND id <> $news_data['id'];


 
j'ai donc le nombre de news qui se trouve avant la news concernée, et sur base de ce nombre je peux calculer a quelle page se trovuera la news.
 
OUI mais, lorsque plusieurs news ont une meme date, il y a probleme, risque que la page trovuée ne soit pas la bonne, du fait qu'on e sait pas trop commetn mysql va trier ces news ayant uen meme date.
Tri sur l'ID en deuxieme lieux et rajouter un critere a la derniere r equete ci-dessus ? Certain enregistremetn risque d'être zappé si un ID ancien a une date rescente, et un id rescent une date ancienne. Donc autre probleme.
 
Faire un champ date_reelle (qui garderait la date reelle a la quelle la news a ete cree dans la table ? Meme probleme qu'avec les ID.
 
Voila il manque vraiment une methode pour savoir quel idnex a tel ou tel enregistrement dans mysql :(


Message édité par Gat$ le 29-01-2008 à 18:00:17
n°1679033
leflos5
On est ou on est pas :)
Posté le 30-01-2008 à 13:45:28  profilanswer
 

Je crois avoir déjà mieux saisie, ce qui me manque c'est pourquoi tu fais ça :whistle:
 
Si je résume, tu as des news avec un système de pagination.  
Tu as un moteur de recherche qui cherche sur tout le site dont autre chose que des news.
Dans le cas d'une news tu veux faire un lien sur la page de la news dans les résultats de la recherche.
 
C'est ça :??:
 
 
Pourquoi vouloir afficher la new sur sa page et pas la new seule vu que c'est elle seule qui est choisie par le moteur :??:
 
 
On en revient à ce que je disais, c'est bien le bon problème que j'avais ciblé au départ, c'est impossible de savoir où t'es dans le jeux de résultat comme ça de base. C'est à toi de trouver un truc, parce que le nombre de résultats dépend des critères que tu poses, donc de toutes manières faut systématiquement rebalayer tout le jeu de résultat :spamafote:
 
Autant rajouter le numéro de la page dans les données, à l'ajout suffit de récupérer le dernier numéro de page et le nombre d'éléments pour définir le bon. A la suppression et bah on redéfinit tout :D

n°1679124
Gat$
http://www.wowteamfinder.com
Posté le 30-01-2008 à 16:16:17  profilanswer
 

leflos5 a écrit :

Je crois avoir déjà mieux saisie, ce qui me manque c'est pourquoi tu fais ça :whistle:
 
Si je résume, tu as des news avec un système de pagination.  
Tu as un moteur de recherche qui cherche sur tout le site dont autre chose que des news.
Dans le cas d'une news tu veux faire un lien sur la page de la news dans les résultats de la recherche.
 
C'est ça :??:
 
 
Pourquoi vouloir afficher la new sur sa page et pas la new seule vu que c'est elle seule qui est choisie par le moteur :??:
 
 
On en revient à ce que je disais, c'est bien le bon problème que j'avais ciblé au départ, c'est impossible de savoir où t'es dans le jeux de résultat comme ça de base. C'est à toi de trouver un truc, parce que le nombre de résultats dépend des critères que tu poses, donc de toutes manières faut systématiquement rebalayer tout le jeu de résultat :spamafote:
 
Autant rajouter le numéro de la page dans les données, à l'ajout suffit de récupérer le dernier numéro de page et le nombre d'éléments pour définir le bon. A la suppression et bah on redéfinit tout :D


 
Bah tu as tout compris à mon probleme...
Je voulais éviter les solution porcasses, mais apparament j'ai pas le choix avec mysql :(
 

Citation :

Pourquoi vouloir afficher la new sur sa page et pas la new seule vu que c'est elle seule qui est choisie par le moteur :??:


 
C'est ce que j'ai fait en attendant, mais ca signifie que je me suis laissez avoir le dessus par ce c***** de language de programmation xD
 
Au pire je peux faire comme tu dis, sauver le numero de page, mais a premiere vue ej trouvias ca un peu bidon ^^
 
Voila tkx au moins je suis fixé :)
 
Gat$

mood
Publicité
Posté le 30-01-2008 à 16:16:17  profilanswer
 

n°1679213
leflos5
On est ou on est pas :)
Posté le 30-01-2008 à 17:38:16  profilanswer
 

Sinon suffit de calculer avec la requête la position, mais ça t'oblige à effectuer une requête à chaque fois, pas terrrible. D'où la solution de stocker la page :spamafote:
 
Y'a rien de porcasse à php ou mysql, c'est une contrainte de sql et de conception normalisée :)


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

  [php / mysql] Numéros de page et tri sur champ date

 

Sujets relatifs
configuration de mysql avec asterisk dans triboxProbleme de mise en page differente sous IE7 et Firefox
[PHP] oracle et paramètre de type date ( ou alors sysdate ;) )[Résolu] [PHP][XML][PDF] Comment appeler FOP depuis une page PHP ?
Page perso...vous demander un conseil...(resolu)Base mysql. transfere de local vers site.
page invisible dans frameStatut d'une page ?
[mysql] Requete avec moyenne avg[RESOLU]Probleme avec Formulaire et BD MySQL
Plus de sujets relatifs à : [php / mysql] Numéros de page et tri sur champ date


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