Liste d'archive

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

04 juin 2008, 23:16

Mais si tu comptes les billets il ne faut justement pas utiliser DISTINCT :)

ET tu devrais GROUPER aussi par année, pour avoir un résultat cohérent

Eléphant du PHP | 451 Messages

05 juin 2008, 19:09

Cela fonctionne parfaitement comme ça tout s'affiche comme je le désirais par contre un autre problème se pose.

Explication:

J'ai ma liste d'archive du moins juste une liste des mois et année ou des billets on été crée.

Exemple:
Juin 2008
Mars 2008
etc...

Et ce sont des liens vers une page qui affiche la liste des billets suivant la date donnée donc mes liens sont constitués comme ceci:
www.monsite.com/?p=archive&idtem=6-2008

Donc la variable idtem contient le mois et année désiré et sont séparé par un -

Mais comment faire pour faire une recherche dans une base lorsque l'on connait que le mois et année.

Car vu que j'enregistre tout mes date avec time() je bloque car cette variable contient jour mois année et heure.

Alors comment faire???

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

05 juin 2008, 22:12

Bah tu sais pas comment récupérer juste l'année et le mois dans une colonne TIMESTAMP ? :P

Eléphant du PHP | 451 Messages

06 juin 2008, 17:04

Si je sais récupéré le mois et année d'un TIMESTAMP mais je vois pas comment faire une recherche dans une base ou le TIMESTAMP serait égal au mois et année qui est choix.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juin 2008, 17:11

Tu peux utiliser les fonctions que tu as déjà utilisées dans le clause WHERE, pour faire une comparaison :

Code : Tout sélectionner

WHERE YEAR(UNIX_TIME...(col_date)) = <parametre_annee>

Eléphant du PHP | 451 Messages

06 juin 2008, 18:57

J'ai fais cette requête:
$sql = "select * from ".$prefix.TABLE_POST." where MONTH(UNIX_TIME(post_time)) = '".$month."' and YEAR(UNIX_TIME(post_time)) = '".$year."' order by post_id desc"
Et voici le message que j'ai:

Code : Tout sélectionner

FUNCTION matable.UNIX_TIME does not exist

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juin 2008, 19:03

D'accord.

Edit :
J'étoffe ma réponse pour ne pas perdre de temps. Il y a plusieurs choses qui m'énervent dans ton message :

1 - balancer la requête et le message d'erreur sans prendre la peine d'enrober un peu par du texte ça fait vraiment foutage de gueule. Genre on est à ta disposition. Le simple fait de mettre une petite phrase comme "je ne comprends sauriez-vous d'où vient le problème", ça n'ajoute pas grand chose mais ça allège un peu le ton du message.

Les gens sur les forums n'ont pas que ça à faire de t'aider donc t'es censé leur parler avec du velour.

2 - Je t'ai donné au début du sujet les conseils de débuggage, que tu m'as dit avoir lu. Vrai ou pas j'en sais rien, en tout cas tu ne les suis pas. Je parle notamment des points 2 et 4. Là on ne peut pas t'aider.

3 - (rejoins un peu le 1) je doute vraiment que tu ais cherché à résoudre l'erreur toi-même, vu la forme du message. Vu qu'il y a marqué "matable" dans l'erreur, ça devrait pas être trop dur à repérer.

Eléphant du PHP | 451 Messages

06 juin 2008, 19:13

Alors je dois faire quoi???

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

06 juin 2008, 19:31

Bah lire ce que j'ai marqué au dessus et t'exécuter... pas besoin de grandes ressources techniques pour être aimable et afficher le SQL généré hein.

Eléphant du PHP | 451 Messages

06 juin 2008, 19:54

Désolé mais ta du éditer ton message quand je rédigais ma réponse bref.

Je ne me fou pas de votre geule. Je sais très bien que vous n'avez pas que ça à faire.

Et j'ai essayé plusieur solution avant de poster, j'ai essayé de remplacer UNIX_TIME par FROM_UNIXTIME.

Et j'ai fait le débugage je te montre ma source:
$sql = "select * from ".$prefix.TABLE_POST." where MONTH(UNIX_TIME(post_time)) = '".$month."' and YEAR(UNIX_TIME(post_time)) = '".$year."' order by post_id desc limit ".intval($debut).",".intval($board_config['nb_post'])."";
$req = $db->dj_query($sql) or die (mysql_error());
		
echo $sql;
Et le echo ne peut rien m'afficher vu que l'erreur est afficher directement par mysql_error().

Et le point 4 du débugage je le comprend pas.
Je comprend pas comment éxécuter cette requête dans phpmyadmin.

Et pour l'erreur il manquait éxactement:

Code : Tout sélectionner

FUNCTION djtec.UNIX_TIME does not exist
Et je ne comprend pas l'erreur. J'ai bien compris que l'erreur venait de ma table mais je comprend pas l'erreur donc voilà.




EDIT:

En faites cela fonctionne, la requête etait:
$sql = "select * from ".$prefix.TABLE_POST." where MONTH(FROM_UNIXTIME(post_time)) = '".$month."' and YEAR(FROM_UNIXTIME(post_time)) = '".$year."' order by post_id desc limit ".intval($debut).",".intval($board_config['nb_post'])."";
$req = $db->dj_query($sql) or die (mysql_error());
Et un problème de variable qui transmettait au templates.

Merci beaucoup pour ton aide ouckileou.

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

07 juin 2008, 16:42

Et le echo ne peut rien m'afficher vu que l'erreur est afficher directement par mysql_error().
Suffit de mettre le echo avant l'exécution de la requête :D

Dans phpMyAdmin tu as un onglet (SQL) qui te permet d'exécuter des requêtes directement. Tu fais donc un modèle avec des paramètres statiques, histoire de valider la syntaxe, et ensuite tu l'intègres dans PHP pour la rendre dynamique. ça va plus vite et c'est plus sûr.

Eléphant du PHP | 451 Messages

07 juin 2008, 20:38

Ok je pense avoir compris.

Merci la prochaine fois je le ferais pour voir.

Pour le echo oui c'est vrai tu as raison ou alors il suffisait que je supprime le mysql_error().