Page 1 sur 1

prob de ORDER BY/GROUP BY

Posté : 30 mars 2008, 13:37
par jerome67
Bonjour tout le monde,

voici la page qui me pose problème ==> http://www.orchestre-megaboys.fr/dates.php
Vous voyez bien que les dates ne sont pas dans le bon ordre....

voici ma requete :

Code : Tout sélectionner

$requete = mysql_query("SELECT id_dates, MONTH(time) AS 'mois', YEAR(time) AS 'annee', Jour_lundi, Type_de_soirée, Lieu, renseignement, GROUP_CONCAT(time SEPARATOR ',') AS 'date' FROM dates GROUP BY mois ");

Vous allez me dire, "rajoute un ORDER BY date apres mon GROUP BY mais rien n'y fait il n'y a aucun changement... je ne comrpends, comment remedier à tous cela?

Voila le code qui affiche les dates au cas ou (pour vous montrer comment je procède)....

Code : Tout sélectionner

echo "<tr><td colspan=5 bgcolor='#BE3B13'><font color=#FFFFFF><b>".$Mois. " " . $resultat['annee']. "</td></tr>"; $mesdate = explode(',' , $resultat['date']); foreach($mesdate as $madate) { $requete2 = mysql_query("SELECT * FROM dates WHERE time = '".$madate."' "); $resultat2 = mysql_fetch_array($requete2); echo "<tr><td><b>".$resultat2['Jour_lundi']." ".date('d',strtotime($madate)). "</b></td><td><b>".$resultat2['Type_de_soirée']."</b></td><td>".$resultat2['Lieu']."</td><td>".$resultat2['renseignement']."</td><td>".date('H:i',strtotime($madate))."</td></tr>"; } }

et voici ma TABLE dates ou se trouve les dates


CREATE TABLE IF NOT EXISTS `dates` (
`id_dates` int(11) NOT NULL auto_increment,
`time` datetime NOT NULL,
`Jour_lundi` text collate latin1_general_ci NOT NULL,
`Type_de_soirée` text collate latin1_general_ci NOT NULL,
`Lieu` text collate latin1_general_ci NOT NULL,
`renseignement` text collate latin1_general_ci NOT NULL,
`type` varchar(12) collate latin1_general_ci NOT NULL,
`envoi` varchar(4) collate latin1_general_ci NOT NULL,
PRIMARY KEY (`id_dates`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=6 ;

Posté : 30 mars 2008, 14:25
par Hubert Roksor
Retire le GROUP BY, ajoute l'ORDER BY et sers-toi de PHP pour mettre les en-têtes des mois à chaque changement.

Remplace aussi mysql_fetch_array() par mysql_fetch_assoc()

Posté : 30 mars 2008, 15:18
par jerome67
Désolé mais avec l'utilisation de GROUP_CONCAT il est obligatoir d'inserrer un GROUP BY :?

Posté : 30 mars 2008, 15:20
par Invité
Désolé mais avec l'utilisation de GROUP_CONCAT il est obligatoir d'inserrer un GROUP BY :?
en fait, mon souci c"'est que le GROUP_CONCAT prend les date dans l'ordre ou elle se trouve dans la BDD hors, certaine date ne sont pas enregistrées dans l'ordre chronologique, il faudrait donc dire à GROUP_CONCAT de prendre les dates mais dans le bon ordre...

Posté : 30 mars 2008, 15:23
par Hubert Roksor
En fait il te faut aussi retirer le GROUP_CONCAT(). Tu groupes en SQL, tu dégroupes en PHP, ce n'est pas logique. Retire toute logique de groupement de MySQL, récupère les enregistrements dans l'ordre et utilise PHP pour afficher les en-têtes là où ça va bien.

Posté : 30 mars 2008, 15:27
par Invité
vé voir....

cependant tu m'as dit d'utiliser fetch_assoc plutot que fetch_array...
tu m' as donné les liens pour comprendre la diference entre ces deux fonction, mais je n'entrouve pas... je ne comprend pas pourquoi assoc plutot que array

Posté : 30 mars 2008, 15:33
par jerome67
sinon j'avais penssé a ne pas grouper en SQL mais mon souci c'est comment n'afficher qu'une fois la barre avec le mois et l'annéee.... voir http://www.orchestre-megaboys.fr/dates.php

Posté : 30 mars 2008, 15:41
par Hubert Roksor
mysql_fetch_assoc() fais exactement ce dont tu as besoin, mysql_fetch_array() fais des trucs en plus dont tu ne te sers pas. En gros, tu as besoin d'un couteau et tu utilises un couteau suisse.

Pour ton "groupement-qui-n'en-est-pas-un", il faut que tu t'en occupes en PHP. Par exemple,
$mois = '';
while ($row = mysql_fetch_assoc($result))
{
    if ($mois != $row['mois'])
    {
        $mois = $row['mois'];
        // afficher bandeau
    }
}
A chaque changement de mois, tu réaffiches le bandeau.

Au fait, le texte "SELECT ..." s'appelle une requête. Ce que renvoit mysql_query() c'est un résultat. Si tu appelles ton résultat $requete, un jour ou l'autre ça va te jouer des tours.

Posté : 30 mars 2008, 15:52
par Invité
MERCI, en fait, j'ai cherchais à faire compliqué alors que c'est pas si ardu que ca

merci

Posté : 30 mars 2008, 16:17
par Hubert Roksor
On a moins de chances de se planter en allant vers le plus simple :P