PHP - Requête MySQL

Geo3304
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 13:17

Bonjour à tous;

Alors j'ai une petit question ou je bloque, je vous explique.
Coté MySQL tout d'abord;

J'ai une table MySQL composé de la sorte ;
id - saison - datedeb - datefin - prix - prix2

Le champ saison est soit 1 soit 2.

Coté PHP;
Je souhaiterais dans ma page prix deux tableaux; un pour la saison 0 avec 'prix' et un pour la saison 1 avec 'prix2'
Pour ce faire j'ai fait ma requête SQL, implanté un "while", et tout va très bien SAUF que je n'arrive pas à faire mes deux tableaux.
Voila la structure;
Si saison = 0 , on affiche while premier tableau avec 'prix', et si saison = 1 , on affiche le deuxième avec 'prix2', sinon, erreur.

Donc ma question ; comment d'un point de vu SQL/PHP, mettre en place ce " si saison=0 " ?

Désolé j'ai essayé de simplifier au maximum,
Merci d'avance,
GeoGe.

ViPHP
xTG
ViPHP | 7331 Messages

15 janv. 2011, 14:26

Tout d'abord il faut ordonner tes données dans le retour de la requête afin de pouvoir avoir deux groupes.
La fonction SQL "GROUP BY" est faite pour cela :
SELECT ......
FROM table
GROUP BY saison;
Cela va te donner quelque chose de la sorte :
id - saison - datedeb - datefin - prix - prix2
x - 1 - x - x - x - x
y - 1 - y - y - y - y
z - 2 - z - z - z - z

Ensuite partant de ce principe il faut dans ta boucle détecter le changement de saison entre l'enregistrement précédent et l'actuel.
echo "<table>" // début tableau saison = 1
$saison = 1; // saison actuelle à afficher
while( $row = ...)
{
  if( $row['saison'] != $saison ) // détection du changement de saison
  {
    echo "</table>"; // fermeture tableau saison = $saison
    echo "<table>"; // ouverture tableau saison suivante
    $saison = $row['saison']; // mise à jour de la saison
  }
  echo "<tr><td>...</td></tr>"; // ton enregistrement
}
echo "</table>"; // fermeture dernière saison

Geo3304
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 17:01

Ah super, merci pour cette réponse si rapide.

Le code marche impeccable, par contre;
Il me retourne uniquement le premier résultat par tableau, ( 1 ligne pour saison '0', et 1 ligne pour saison '1' ), alors que je voudrais qu'il me retourne l'ensemble, d'ou vient ce problème ?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 janv. 2011, 17:12

salut,

quel est ta requête complète ?

n'a tu pas une limite ?

@+
Il en faut peu pour être heureux ......

Geo3304
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 17:34

Non aucune limite, uniquement un classement ascendant dans ma requête. :?
SELECT ID,saison, DATE_FORMAT(datedeb, '%d-%m-%Y') as datedeb ,DATE_FORMAT(datefin, '%d-%m-%Y') as datefin,prix,prix2 FROM $T_prix GROUP BY saison ORDER BY $T_prix.datedeb ASC

Geo3304
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 21:38

Bonsoir,
Alors le problème viendrait apparemment de la partie SQL et non du coté PHP.
J'ai essayer de lancer la requête (ci-dessus) directement dans p.m.a , et le résultat obtenu est le même:
Ma requête m'affiche uniquement les premiers résultats de chaque saison, j'entend par là; le premier résultat correspondant à saison = 1 et le premier résultat correspondant à saison = 0.

Ci-dessous la structure de ma base SQL, si cela peut vous aider ;
CREATE TABLE IF NOT EXISTS `prix` (
  `ID` smallint(11) unsigned NOT NULL AUTO_INCREMENT,
  `saison` tinyint(1) NOT NULL,
  `datedeb` date NOT NULL,
  `datefin` date NOT NULL,
  `prix` decimal(6,2) NOT NULL,
  `prix2` decimal(6,2) NOT NULL,
  PRIMARY KEY (`ID`)
) ENGINE=MyISAM  DEFAULT CHARSET=latin1 AUTO_INCREMENT=17 ;
Merci d'avance pour votre aide.

ViPHP
xTG
ViPHP | 7331 Messages

15 janv. 2011, 22:50

Quelle boulette...

Grouper ne veut pas forcement dire GROUP BY, j'ai pas réfléchi sur le moment désolé...
Un ORDER BY saison ASC devrait suffire avec le code que je t'ai donné. :)

Geo3304
Invité n'ayant pas de compte PHPfrance

15 janv. 2011, 23:06

Aaah je me disais :)
Donc, en virant le GROUP BY, tout marche impeccable.
Par contre, avant, mes résultats étaient affichés en fonction de la date début or maintenant, du coup, cet ordre n'est plus valable.
Est-il possible de combiner un ORDER BY datedeb ASC et un ORDER BY saison ASC par la requête ou d'une manière détournée?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

16 janv. 2011, 00:21

ouep order by datedeb asc,saison asc


@+
Il en faut peu pour être heureux ......

Geo3304
Invité n'ayant pas de compte PHPfrance

16 janv. 2011, 00:26

Tout fonctionne impeccable ;)
Merci beaucoup à vous !!

ViPHP
xTG
ViPHP | 7331 Messages

16 janv. 2011, 10:07

Attention cependant, il faut mettre plutôt :
ORDER BY saison ASC, datedeb ASC
Sinon tu risques d'avoir des saisons mélangées.

Geo3304
Invité n'ayant pas de compte PHPfrance

16 janv. 2011, 11:37

Oui, c'est bien ce que je j'avais mis :)
Merci!