Interroger qu'une partie d'une entrée d'une table.

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 : Interroger qu'une partie d'une entrée d'une table.

par Hubert Roksor » 11 oct. 2007, 00:48

Ton script devrait ressembler à ça
$sql = "SELECT DISTINCT DATE_FORMAT('date', '%M %Y') AS date
        FROM blog
        ORDER BY date DESC"; 
$result = mysql_query($sql, $bdd);

if (!$result)
{
	trigger_error('Erreur SQL: ' . mysql_error());
	exit;
}

echo '<ul>';
while ($row = mysql_fetch_assoc($result))
{
	echo '<li>', $row['date'], '</li>';
}
echo '</ul>';
Je ne sais pas d'où vient ton NULL, aucune de ces fonction ne devrait renvoyer une telle valeur. Si je devais deviner, je dirais que tu as fait une typo. N'oublie pas error_reporting(E_ALL); pour voir toutes les erreurs.

par lexarino » 10 oct. 2007, 23:54

Merci M Roksor !

Cependant, bien que je n'ai plus de message d'erreur, on me retourne des valeurs NULL avec var_dump(). J'ai essayé de tester directement dans PHPmyadmin ce qui est une bonne façon de procéder que je n'appliquais pas ;) Mais pareil. J'ai testé sur MySQL 5.3.

Je pense qu'on est plus très loin du résultat !

par Hubert Roksor » 10 oct. 2007, 22:38

Suis les conseils de débogage, et regarde le contenu des variables avec var_dump()

Si tu veux utiliser mysql_fetch_assoc() il te faudra donner un alias à ta colonne, par exemple

Code : Tout sélectionner

SELECT DISTINCT DATE_FORMAT('date', '%M %Y') AS date FROM blog

par lexarino » 10 oct. 2007, 19:51

Merci AB !

Lecture accomplie, j'ai identifié ce qu'il me fallait :

Code : Tout sélectionner

SELECT DATE_FORMAT('1997-10-04 22:23:00', '%M %Y'); -> 'October 1997'
Cependant, j'avais souligné que j'étais une bille !
Du coup je ne sais pas comment l'appliquer au reste de ma requête :
Pour rappel : le but est d'appliquer ce code à une table avec une entrée 'date'.

En fait pour imager ce serait ça ou 'date' est mon entrée 'date' de ma table 'blog' :

Code : Tout sélectionner

$query_archives = "SELECT DISTINCT DATE_FORMAT('date', '%M %Y') FROM blog"; $archives = mysql_query($query_archives, $bdd) or die(mysql_error()); $row_archives = mysql_fetch_assoc($archives);
^ ceci ne marche pas bien entendu et c'est là que je coince ^

Le but de cette expression est de :
- transformer toutes les dates enregistrées sous la forme 'datetime' : 2007-04-12 13:09:56 en April 2007 (voire en français se serait nikel !).
- et de supprimer les doublons afin d'obtenir une liste qu'avec des "mois-année".

Code : Tout sélectionner

<?php { do { ?><li><? echo $row_archives; ?></li><? } while ($row_archives = mysql_fetch_assoc($archives)); } ?>
Voilà, merci du coup de main dans tous les cas !

par AB » 10 oct. 2007, 09:04

par Sedril » 10 oct. 2007, 08:59

Tu travailles avec quelle base de données ?

Interroger qu'une partie d'une entrée d'une table.

par lexarino » 10 oct. 2007, 03:02

Bonjour à tous !

Voilà, je souhaite faire un blog simplissime et pour cela je dois gérer l'accès aux archives.
Pour ce faire, j'ai décidé de couper les archives par mois et année.

Concrètement, voici la procédure :
Je fouille dans la base pour interroger toutes les entrées 'date' du blog.
A partir des résultats je trie pour récupérer le mois et l'année et ainsi établir une liste précise des posts.

Le problème : l'entrée "date" de ma table est sous la forme "datetime" et donc : "2006-04-12 12:04:45" par exemple.
C'est là où tout se complique (pour moi) !

En fait je n'ai besoin que de l'information "2006-04" dans mon affaire !
À partir de là j'appliquerais un DISTINCT qui viendrait faire le ménage pour virer les doublons.

Ce qu'il me faudrait ce serait :

Code : Tout sélectionner

$query_archives = "SELECT DISTINCT date FROM blog ORDER BY date DESC"; ou date serait coupée comme ceci en php (pour imager !) : $date = substr($date, 0, 7);
Vous l'aurez compris, je suis une bille en bdd et je ne sais pas bien ce qu'il est possible de faire dans mon cas ;)

Merci par avance de vous penchez sur l'affaire !