Liste d'archive

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Liste d'archive

par djtec » 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().

par ouckileou » 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.

par djtec » 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.

par ouckileou » 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.

par djtec » 06 juin 2008, 19:13

Alors je dois faire quoi???

par ouckileou » 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.

par djtec » 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

par ouckileou » 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>

par djtec » 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.

par ouckileou » 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

par djtec » 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???

par ouckileou » 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

par djtec » 04 juin 2008, 23:13

J'utilise DISTINCT pour éviter les doublons.

Voici la requête:
select count(*), MONTH(FROM_UNIXTIME(post_time)) as month, YEAR(FROM_UNIXTIME(post_time)) as year from test_post group by month desc
Pour que count() fonctionne je dois retirer distinct

par ouckileou » 04 juin 2008, 22:58

On peut voir la requête que tu essaies pour avoir cette erreur ? Et comme tu as lu les conseils de débuggage tu nous donneras bien le SQL généré, pas celui avec les variables PHP.

Le message d'erreur te suggère de regarder la doc, c'est un bon conseil, suis le.

COUNT compte les lignes, en fait tu n'as pas besoin du DISTINCT si tu veux connaître le nombre de messages postés chaque mois.

par djtec » 04 juin 2008, 22:34

Voici ma requête actuelle et elle fonctionne parfaitement:
$sql = "select distinct MONTH(FROM_UNIXTIME(post_time)) as month, YEAR(FROM_UNIXTIME(post_time)) as year from ".$prefix.TABLE_POST." group by month desc";
$req = $db->dj_query($sql) or die (mysql_error());

while ($row = $db->dj_fetch_array($req)) 
    {
		$tpl->assign_block_vars('arcrow', array(
			'DATE' => dj_month_format($row[0]).' '.$row[1]
		));
    }
Mais par contre quand je met quand j'essaye de mettre COUNT() la j'ai une erreur sql.

Voici le message d'erreur:
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'distinct MONTH(FROM_UNIXTIME(post_time)) as month, YEAR(FROM_UNIXTIME(post_time)' at line 1
J'ai beau essayé de mettre COUNT() avant ou après le DINSTINCT j'ai toujours la même erreur.