JeuWeb - Crée ton jeu par navigateur
Sélectionner avec deux champs les plus inférieurs qui existent - Version imprimable

+- JeuWeb - Crée ton jeu par navigateur (https://jeuweb.org)
+-- Forum : Discussions, Aide, Ressources... (https://jeuweb.org/forumdisplay.php?fid=38)
+--- Forum : Programmation, infrastructure (https://jeuweb.org/forumdisplay.php?fid=51)
+--- Sujet : Sélectionner avec deux champs les plus inférieurs qui existent (/showthread.php?tid=4640)



Sélectionner avec deux champs les plus inférieurs qui existent - Pio154 - 12-03-2010

Salut à tous, titre un peu trop long Confused
Je recherche comment faire ceci :
Sélectionner un produit avec :
- La date la plus inférieur qui existe (timestamp) type int(11)
- La période la plus inférieur qui existe
- En fonction du nom du produit et de la catégorie (idc)

Code :
CREATE TABLE IF NOT EXISTS `produits` (
  `id` int(11) NOT NULL AUTO_INCREMENT,
  `idc` int(11) NOT NULL,
  `date` int(11) NOT NULL,
  `periode` int(11) NOT NULL,
  `nom` text COLLATE utf8_unicode_ci NOT NULL,
  `prix` float NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=MyISAM  DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci AUTO_INCREMENT=25 ;


    SELECT `id`,`prix` FROM `produits`
        WHERE
        `nom` = "'.$donnee['nom'].'" AND
        `idc` = "'.$c_id.'" AND
    ORDER BY `date`,`periode`;

Si vous pouvez m'aider, merci d'avance.


RE: Sélectionner avec deux champs les plus inférieurs qui existent - Zamentur - 12-03-2010

A vrai dire je comprend pas ce que tu veux... Tu pourrais donner un exemple avec des tuples (des lignes si tu préfères) différents et lequel tu souhaites selectionner.

Non parce que là ta requête est bonne si tu souhaites sélectionner d'abord les produits ayant la data la plus ancienne et parmi cela ceux qui ont la plus petite période.


RE: Sélectionner avec deux champs les plus inférieurs qui existent - pierrick - 12-03-2010

Code :
SELECT `id`,`prix` FROM `produits`
        WHERE
        `nom` = "'.$donnee['nom'].'" AND
        `idc` = "'.$c_id.'" AND
    ORDER BY `date` ASC,`periode`ASC,`nom` DESC LIMIT 0,1;

avec ce code il va te selectionner le produit avec la date la plus petite, si il y a 2 dates identiques, il organisera par periode la plus petite en gardant la plus petite date et si toujours en égalité avec un autre, il sélectionne le nom Par ordre alphabétique et te retourne seulement le premier resulatat trouvé

En espérant que c'est ce que tu cherchais a faire Wink


RE: Sélectionner avec deux champs les plus inférieurs qui existent - Pio154 - 13-03-2010

Finalement, je ne sais pas trop où est mon problème Confused
http://ups.imagup.com/08/1268481971.jpg
Les erreurs sont encadrées en bleu.

Code :
        while ( $donnee = mysql_fetch_assoc ( $requete1 ) )
        {
            // ENREGISTRE LES TOTAUX PAR PERIODE
            if (!isset($categories [$c_id]['total_periode']))
            $categories [$c_id]['total_periode'] = array ( 1 => 0,  2 => 0,  3 => 0,  4 => 0,  5 => 0 );
            $categories [$c_id]['total_periode'][$donnee['periode']] += $donnee['prix'];
            $categories [$c_id]['total'] += $donnee['prix'];


            // REQUETE
            $evolution = mysql_fetch_assoc(mysql_query(
                'SELECT `id`,`prix` FROM `produits` WHERE

                    `nom` = "'.$donnee['nom'].'" AND
                    `idc` = "'.$c_id.'" AND
                    `date` = "'.$date_t.'" AND
                    `periode` < "'.$donnee['periode'].'"
                    ORDER BY `periode` DESC, `id` ASC LIMIT 0,1;'
                ,$mysql));
            
            if ($evolution == false )
            $evolution = mysql_fetch_assoc(mysql_query(
                'SELECT `id`, `prix`, MAX(`periode`) FROM `produits` WHERE
                    `nom` = "'.$donnee['nom'].'" AND
                    `idc` = "'.$c_id.'" AND
                    `date` < "'.$date_t.'";', $mysql));

            if ($evolution['prix']=='') $evolution['prix'] = $donnee['prix'];

            $evo = mysql_fetch_assoc(mysql_query('SELECT `id`,`prix` FROM `produits`
                WHERE
                `nom` = "'.$donnee['nom'].'" AND
                `idc` = "'.$c_id.'"
            ORDER BY `date` ASC, `periode` ASC, `id` ASC LIMIT 0,1;', $mysql));

            // ENREGISTRE LE PRODUIT PAR PERIODE AVEC LE PRIX/EVOLUTION
            $categories [$c_id]['prods'][$donnee['nom']][$donnee['periode']] = array (
                'prix' => $donnee['prix'],
                'evo_pc' => (($donnee['prix']*100)/$evolution['prix'])-100,
                'evo_p' => $evolution['prix'] * ((($donnee['prix']*100)/$evolution['prix'])-100) / 100
            );

            // ENREGISTRE LE TOTAL DU PRODUIT SUR LES 5 PERIODES
            if (!isset($categories [$c_id]['prods'][$donnee['nom']]['total']))
            $categories [$c_id]['prods'][$donnee['nom']]['total'] = 0;
            $categories [$c_id]['prods'][$donnee['nom']]['total'] += $donnee['prix'];


                $categories [$c_id]['prods'][$donnee['nom']]['evo'] = array (
                    'pc' =>  ( $donnee['prix'] * 100 / $evo['prix'] ) - 100,
                    'p'  => $evo['prix'] * ( ( ( $donnee['prix'] * 100 / $evo['prix'] ) - 100 ) / 100 )
                );

            $totaux ['total_periode'][$donnee['periode']] += $donnee['prix'];
            $totaux ['total'] += $donnee['prix'];
        }