explode dans SQL ?

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 sept. 2005, 15:43

laisse tomber le substr(), c'est inutile ici

soit tu utilises YEAR() et MONTH() qui te renvoie 2 valeurs distinctes, donc même pas besoin d'explode() ensuite

soit tu utilises DATE_FORMAT() : c'est un peu le même principe que date() en PHP, tu choisis ce que tu veux sortir (mois, année, jour) avec des variables et entre tu mets ce que tu veux, donc un tiret par exemple

pour le EXTRACT() je ne sais pas comment faire

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 16:02

Effectivement, je vais utiliser DATE_FORMAT plutot je crois, surtout que au final, je dois afficher ma date selon ce format : Junuary 2005, February 2005, et DATE_FORMAT a l'air très bien pour faire ça.

mais

$sql_sort = "SELECT DATE_FORMAT(date,'%M %Y') FROM articles";

me renvoie "Erreur de syntaxe près de '$sql_sort = "SELECT DATE_FORMAT(date,'%M %Y') FROM articles"'"

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 sept. 2005, 16:09

si c'est une erreur PHP il faudrait chercher un peu autour et nous montrer un peu de code

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 16:10

nan c'est une erreur renvoyé via la base de donnée directement.

$sql_sort = "SELECT DATE_FORMAT('date','%M %Y') AS date FROM articles";

ne marche pas non plus.

Pourtant, ma table articles a bien un champ appelé 'date' .

Modérateur PHPfrance
Modérateur PHPfrance | 6373 Messages

02 sept. 2005, 16:13

"date" est un mot utilisé par MySQL, donc on évite généralement de l'utiliser

essaye comme ça :

Code : Tout sélectionner

SELECT DATE_FORMAT(`date`,'%M %Y') AS date FROM articles
et teste la d'abord dans phpMyAdmin

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 16:15

j'ai testé (cf reponse precedente) et c'est phpmyadmin qui me renvoit cette erreur.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

02 sept. 2005, 16:23

et comme ca ??

$select = "SELECT DATE_FORMAT(date,'%m-%Y') AS date FROM articles";
$query = mysql_query($select);
$res=mysql_fetch_array($query);
echo $res["date"];

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 16:43

$select = "SELECT DATE_FORMAT(date,'%m-%Y') AS date FROM articles";

ne passe pas sous phpMyAdmin deja, donc aucune chance que le reste marche :)

EDIT : j'avais fait une erreur, j'avais ouvlié d'enlever le $select devant la requete . par contre la requete me sort ça :

date
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL

RE EDIT : c'est bon cette fois :
SELECT DISTINCT DATE_FORMAT(date,'%M %Y') AS date FROM articles DESC
par contre je n'arrive pas à ordonner les dates comme je voudrais, le ORDER BY ne marche pas. je voudrais les trier de la plus recente a la plus vieille.
En fait la elles sont à peu près triées, sauf la plus récente qui se met tout en bas de la liste :

date
May 2005
April 2005
March 2005
February 2005
January 2005
November 2004
October 2004
August 2004
August 2005
Modifié en dernier par VaN le 02 sept. 2005, 17:00, modifié 1 fois.

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

02 sept. 2005, 16:59

le bout de code donné précédemment marche chez moi dc pkoi il ne marcherai pas avec toi ??
la requete me sort ça :
date
NULL
NULL
NULL
NULL
NULL
NULL
NULL
NULL
ta table contient bien des dates ?

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 17:02

c'est bon cette fois :
SELECT DISTINCT DATE_FORMAT(date,'%M %Y') AS date FROM articles DESC  
par contre je n'arrive pas à ordonner les dates comme je voudrais, le ORDER BY ne marche pas. je voudrais les trier de la plus recente a la plus vieille.
En fait la elles sont à peu près triées, sauf la plus récente qui se met tout en bas de la liste :

date
May 2005
April 2005
March 2005
February 2005
January 2005
November 2004
October 2004
August 2004
August 2005

Modérateur PHPfrance
Modérateur PHPfrance | 7636 Messages

02 sept. 2005, 17:07

comme ceci:

SELECT DATE_FORMAT(date,'%m-%Y') AS date2 FROM articles ORDER BY date DESC

remarque: j'ai mis "date2" pour eviter les éventuel conflits

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 sept. 2005, 17:16

quel est le format de ton champ "date" ? (nom très mal choisi...mets date_fin ou date_inscription...etc..)
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 17:16

Bien joué, c'etait effectivement du au conflit on dirait. avec date2, ça marche

Modérateur PHPfrance
Modérateur PHPfrance | 6037 Messages

02 sept. 2005, 17:22

C'est résolu ?
Règle n°2 du webmaster : Toujours commencer par le HTML qu'on veut obtenir....toujours ! :priere:
J'aime apprendre de nouvelles choses.

VaN
Mammouth du PHP | 1107 Messages

02 sept. 2005, 17:25

Bah en fait nan :lol:

au niveau de mon select, impec, c'est trié comme il faut. mais lorsque le clique pour choisir une date, au lieu de me prendre cette date la en compte, il me prend celle juste en dessous. Il me semble que j'ai deja été confronté a ce probleme, comme quoi un musql_fetch_array crée un tableau, et se positionne a la premiere ligne, et ça causait un probleme de ce genre .

le code pour mieux y voir (ou pas :D )
<form action="index.php" name="sort" method="get">
      	<?php 
	  	if (isset($_GET['cat'])) 
		{
	  	?>
        <input type="hidden" name="cat" value="<?php echo ($_GET['cat']); ?>" />
        <?php
		}
		?>
        <select name="date" onchange="submit()" style="margin:0px; ">
        <option value="no">Choose a date</option>
        <?php
		if(isset($_GET['cat']) && $_GET['cat']=='2')
		{
		$sql_def = "SELECT DISTINCT date FROM media_articles";
		$sql_sort = "SELECT DISTINCT DATE_FORMAT(date,'%M %Y') AS date2 FROM media_articles ORDER BY date DESC";
		}
		else
		{
		$sql_def = "SELECT DISTINCT date FROM articles";
		$sql_sort = "SELECT DISTINCT DATE_FORMAT(date,'%M %Y') AS date2 FROM articles ORDER BY date DESC";
		}
		$query_def = mysql_query($sql_def);
		$query_sort = mysql_query($sql_sort) OR die ("Erreur : ".mysql_error());
		while ($result_sort = mysql_fetch_array($query_sort)) {
		
		$result_def = mysql_fetch_array($query_def);
		
		$date = $result_sort['date2'];
		$explode = explode(" ",$date);
		$annee_exp = $explode[1];

		
		//$sql = "SELECT mois FROM mois WHERE id_mois='$mois_exp'";
		//$query = mysql_query($sql);
		//$result = mysql_fetch_array($query);
		?>
            <option value="<?php echo $result_def['date']; ?>"
		<?php
		if (isset($_GET['date'])) 
		{
			if ($_GET['date']==$result_sort['date2']) 
			{
				echo "selected";
			}
		}
		?>
		><?php echo $date ?></option>
        <?php
		}
		?>
        </select>
&nbsp;&nbsp;&nbsp;
        </form>
c'est au niveau de
while ($result_sort = mysql_fetch_array($query_sort)) { 
         
        $result_def = mysql_fetch_array($query_def); 
et

Code : Tout sélectionner

<option value="<?php echo $result_def['date']; ?>" <?php if (isset($_GET['date'])) { if ($_GET['date']==$result_sort['date2']) { echo "selected"; } } ?> ><?php echo $date ?></option>
que cela doit genérer le probleme j'imagine

pour résumer le probleme, c'est comme si il y'a vait une ligne d'écart entre le tableau $result_def et le tableau $result_sort
Modifié en dernier par VaN le 02 sept. 2005, 17:28, modifié 2 fois.