[PHP/SQL] Mise en place d'Archive. Prob con avec script

Mise en place d'Archive. Prob con avec script [PHP/SQL] - Programmation

Marsh Posté le 27-02-2002 à 21:53:38    

Voila, j'aimerai faire un systeme d'archives, classées par mois. Mon probleme semble moindre, peut etre arriverez vous aisément a le résoudre.
Le voici :
ma page archives se compose d'un page, indexé tous les mois de l'année, voila son code ki est a corrigé, je le rappelle :
 
<?
require("config.php3" );
$db=mysql_connect("$sql","$log","$pas" );
mysql_select_db("$dbs",$db);
 
 
$reqARC = MYSQL_QUERY("SELECT DISTINCT date,id FROM sys_news ORDER BY id" ) OR DIE("pb selection" );
$resARC = mysql_num_rows($reqARC) OR DIE("pb numrows" );
 
$i=0;
while($i!=$resARC)
 {
$mois = substr(mysql_result($reqARC,$i,"date" ),3,7);
$ARCHIVES = " [<a href='archives.php3?date=$mois'>$mois</a>] ";
$i++;
echo "$ARCHIVES";
 
 }
 
mysql_close();
?>
 
 
Le probleme, est kil m'affiche autant de fois $ARCHIVES qu'il n'y a de news. Or, je ne voudrai que le meme mois ne s'affiche qu'une seule fois pour former le lien vers ce mois-ci.
Le résultat obtenue avec ce codage est tout a fait compréhensible, seulement, je n'arrive aps en faire en sorte kil en soit autrement.
 
Merci
 
Rainckill

Reply

Marsh Posté le 27-02-2002 à 21:53:38   

Reply

Marsh Posté le 27-02-2002 à 22:01:38    

rainckill a écrit a écrit :

$reqARC = MYSQL_QUERY("SELECT DISTINCT date,id FROM sys_news ORDER BY id" ) OR DIE("pb selection" );




 
Fait plutôt un "SELECT DISTINCT date FROM ... " parce que là c'est normal qu'il te sorte autant de mois que de news, parce qu'il cherche les combinaisons uniques de la date ET de l'id, donc tout les ids normalement.

Reply

Marsh Posté le 27-02-2002 à 22:03:01    

wé ta pas tor, mais c toujours le meme probleme...
 :(

Reply

Marsh Posté le 27-02-2002 à 22:04:47    

rainckill a écrit a écrit :

wé ta pas tor, mais c toujours le meme probleme...
 :(  




 
tu veux dire que tu as encore des doublons dans les mois? et tu es sûr que tu as écris les mois partout de la même façon? la casse y comprise..

Reply

Marsh Posté le 27-02-2002 à 22:07:15    

le code de la page est coller ci haut... le resultat kil donne est :
 
[01/2002] [02/2002] [02/2002] [02/2002] [02/2002]
 
a savoir : il y a dans ma table sys_news 1 news datant de janvier 02, et 4 autres datant de fevrirer 02 (comme le montre le resultat coller en ahut)

Reply

Marsh Posté le 27-02-2002 à 22:11:16    

rainckill a écrit a écrit :

le code de la page est coller ci haut... le resultat kil donne est :
 
[01/2002] [02/2002] [02/2002] [02/2002] [02/2002]
 
a savoir : il y a dans ma table sys_news 1 news datant de janvier 02, et 4 autres datant de fevrirer 02 (comme le montre le resultat coller en ahut)  




 
 
Bon essaie alors ceci :
 
SELECT date FROM sys_news GROUP BY date ORDER BY id DESC

Reply

Marsh Posté le 27-02-2002 à 22:13:07    

nop, tjs pô :(
 
resultat :
[02/2002] [02/2002] [02/2002] [02/2002] [01/2002]
 
mùais il vient aps de là le probleme, je pense, mais plutot de la boucle while :-/

Reply

Marsh Posté le 27-02-2002 à 22:18:59    

rainckill a écrit a écrit :

nop, tjs pô :(
 
resultat :
[02/2002] [02/2002] [02/2002] [02/2002] [01/2002]
 
mùais il vient aps de là le probleme, je pense, mais plutot de la boucle while :-/  




 
bah non parce que tu ne peux pas faire plus de boucle que le nombre de lignes dans ton résultat...
 
Tu peux redonner la requête que tu as maintenant?

Reply

Marsh Posté le 27-02-2002 à 22:28:01    

ben, je voit aps ou tu veux en venir qd tu me demandes kelle requete g en ce moment :) car, enfait, g rien essayer de plus que tu ma dit, voila un ptit historique :
 
SELECT DISTINCT date,id FROM sys_news ORDER BY id" ) OR DIE("pb selection" (la mienne du debut)
 
 
apres y a eu :
SELECT DISTINCT date FROM sys_news ORDER BY id" ) OR DIE("pb selection"
 
ensuite :
"SELECT date FROM sys_news GROUP BY date ORDER BY id DESC"
 
 
sachant ke toutes mene au meme probleme...celui cité plus haut :)
 
La en ce moment, je suis revenu a celle du début... mais bon, aucun resultat bien sur  :(

Reply

Marsh Posté le 27-02-2002 à 22:33:58    

Tu peux essayer un banal :
 
SELECT DISTINCT date FROM sys_news;
 
?

Reply

Marsh Posté le 27-02-2002 à 22:33:58   

Reply

Marsh Posté le 27-02-2002 à 22:37:42    

tjrs le meme blem :(

Reply

Marsh Posté le 27-02-2002 à 22:42:27    

rainckill a écrit a écrit :

tjrs le meme blem :(  




 
bon écoute... 2 possibilités :
- Soit ,par exemple si tu testes sur ton site web, le script n'est pas à jour... genre tu as oublié de l'uploader
- Soit les dates ne sont pas EXACTEMENT ecrits de la même façon dans chaque rangées (vérifie avec phpmyadmin)
 
TIENS... au fait ... comment stockes -tu la date dans la base... je veux sous quel format? avec le jour, heure, seconde je suppose?

Reply

Marsh Posté le 28-02-2002 à 18:12:26    

1/ j'utilise easyphp (en local donc) pour testé mes script php...
 
2/ je les stocke sous le format 27/02/2002 et oui, elle sont toutes pareilles ce ki est logique :-/ avec le "substr(mysql_result($reqARC,$i,"date" ),3,7" je ne garde ke le moi et l'anné : [02/2002]

Reply

Marsh Posté le 28-02-2002 à 20:33:42    

rainckill a écrit a écrit :

1/ j'utilise easyphp (en local donc) pour testé mes script php...
 
2/ je les stocke sous le format 27/02/2002 et oui, elle sont toutes pareilles ce ki est logique :-/ avec le "substr(mysql_result($reqARC,$i,"date" ),3,7" je ne garde ke le moi et l'anné : [02/2002]  




 
donc le problème c'est qu'il fait le distinct sur la date complete... jour/mois/annee et non pas par mois (il ne peut pas deviner tes intentions :)
Donc comme je suppose que tu as stocké la date dans un champ texte (vu le format), il faut que tu fasses le Substr dans la requête MySQL :
 
 
SELECT DISTINCT SUBSTRING (date, 4, 7) FROM sys_news ORDER BY id;

Reply

Marsh Posté le 28-02-2002 à 20:57:28    

oui, c au format texte (varchar), je savais aps kon pouvais faire un SUBSTRING  direct a aprtir de la requete sql :)
 
mais, il y a un probleme... T sur de la syntaxe du code ke ta mis la ? car enfait, g mis :
 
$reqARC = MYSQL_QUERY("SELECT DISTINCT SUBSTRING (date, 4, 7) FROM sys_news ORDER BY id" ) OR DIE("pb selection" );
 
et il me dit justement erreur selection :-/

Reply

Marsh Posté le 28-02-2002 à 21:07:04    

rainckill a écrit a écrit :

oui, c au format texte (varchar), je savais aps kon pouvais faire un SUBSTRING  direct a aprtir de la requete sql :)
 
mais, il y a un probleme... T sur de la syntaxe du code ke ta mis la ? car enfait, g mis :
 
$reqARC = MYSQL_QUERY("SELECT DISTINCT SUBSTRING (date, 4, 7) FROM sys_news ORDER BY id" ) OR DIE("pb selection" );
 
et il me dit justement erreur selection :-/  




 
essaie ca alors :
SELECT DISTINCT SUBSTRING (date, 4, 7) as date, id FROM sys_news ORDER BY id

Reply

Marsh Posté le 28-02-2002 à 21:53:25    

nop, tjrs meme pb :
 
"pb de selection"

Reply

Marsh Posté le 28-02-2002 à 22:21:30    

rainckill a écrit a écrit :

nop, tjrs meme pb :
 
"pb de selection"  




 
hum tu peux plutot mettre un :
OR DIE (mysql_error())
 
pour que je sache au moins l'erreur :D

Reply

Marsh Posté le 01-03-2002 à 21:20:06    

"Something is wrong in your syntax près de '(date, 4, 7) as date, id FROM sys_news ORDER BY id' à la ligne 1"

Reply

Marsh Posté le 01-03-2002 à 21:27:08    

rainckill a écrit a écrit :

"Something is wrong in your syntax près de '(date, 4, 7) as date, id FROM sys_news ORDER BY id' à la ligne 1"  




 
Peut-être que tu as une espace avant les parenthèses?enfin essaie
et surtout rentre cette requête et débrouille toi pour que ce soit sur plusieurs lignes, comme ca on saura précisemment l'erreur :
 
SELECT DISTINCT SUBSTRING(date, 4, 7) AS date2, id
FROM sys_news
ORDER BY id;

Reply

Marsh Posté le 01-03-2002 à 21:34:51    

bon, oui y avait un espace :D
 
 
maintenant il affiche : [2002] [2002] [2002] [2002] [2002]  
 
sans le mois kom tu peux le voir... mais toi, ct 4, 7 alors kavant ct 3, 7 g donc mis 3, 7 mais la c pire : [/200] [/200] [/200] [/200] [/200]  
 
m'enfin, la n'est aps le véritable probleme... mais bel et bien de celui ki fait kil se repete plusieur fois :((

Reply

Marsh Posté le 02-03-2002 à 19:00:26    

rainckill a écrit a écrit :

bon, oui y avait un espace :D
 
 
maintenant il affiche : [2002] [2002] [2002] [2002] [2002]  
 
sans le mois kom tu peux le voir... mais toi, ct 4, 7 alors kavant ct 3, 7 g donc mis 3, 7 mais la c pire : [/200] [/200] [/200] [/200] [/200]  
 
m'enfin, la n'est aps le véritable probleme... mais bel et bien de celui ki fait kil se repete plusieur fois :((  




 
oui pour le SUBSTRING (date, 4, 7) j'ai mis 4 parce que j'avais vu que ça ne marchera pas avec 3, 7 :)
 
Pour la requête essaie ça (mais vérifie avant que tu stockes bien dans date ce format là : jj/mm/aaaa) :
 
SELECT DISTINCT SUBSTRING(date, 4) AS date2
FROM sys_news  
ORDER BY id;
 
Là normalement tu ne devrais avoir que 2 valeurs en retour (desole j'avais oublie que le distinct agissait sur les 2 champs).
D'ailleurs tu dois récupérer la valeur dans 'date2'.
 
Et je pense que si tu as 2002 en retour, c'est que tu n'as pas désactivé ta fonction substr dans ton code php ;)

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed