prob de ORDER BY/GROUP BY

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 : prob de ORDER BY/GROUP BY

par Hubert Roksor » 30 mars 2008, 16:17

On a moins de chances de se planter en allant vers le plus simple :P

par Invité » 30 mars 2008, 15:52

MERCI, en fait, j'ai cherchais à faire compliqué alors que c'est pas si ardu que ca

merci

par Hubert Roksor » 30 mars 2008, 15:41

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.

par jerome67 » 30 mars 2008, 15:33

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

par Invité » 30 mars 2008, 15:27

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

par Hubert Roksor » 30 mars 2008, 15:23

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.

par Invité » 30 mars 2008, 15:20

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...

par jerome67 » 30 mars 2008, 15:18

Désolé mais avec l'utilisation de GROUP_CONCAT il est obligatoir d'inserrer un GROUP BY :?

par Hubert Roksor » 30 mars 2008, 14:25

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()

prob de ORDER BY/GROUP BY

par jerome67 » 30 mars 2008, 13:37

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 ;