A voir également:
- Créer une table actuel à partir d'une table h
- Table ascii - Guide
- Table des matières word - Guide
- Creer un groupe whatsapp a partir d'un autre groupe - Guide
- Créer une adresse hotmail - Guide
- Créer une story facebook - Guide
9 réponses
Bonjour c’est cleminuite sur le forum commentçamarche.net. Tu as commencé à m’aider à résoudre mon problème et je vous prie de m’aider le finaliser.
En fait, il y a un problème avec la requête ($sql='SELECT * FROM table GROUP BY champ ORDER BY id DESC';). Le problème est que la requête n’affiche pas le dernier enregistrement lorsqu’il y a plusieurs enregistrements pour le même « code planteur ». Je ne sais pas comment résoudre cette difficulté. Par exemple pour le code planteur « JUSTIN », il y a 2 enregistrements mais au lieu d’afficher celui dont le id=9 c’est celui dont le id=8 qu’il affiche.
Voici ma table et son contenu afin de vous permettre de mieux m’aider.
CREATE TABLE `donnees` (
`id` int(11) NOT NULL auto_increment,
`motcle` text NOT NULL,
`codeentreprise` varchar(150) NOT NULL default '',
`mois` varchar(150) NOT NULL default '',
`prixAchat` varchar(150) NOT NULL default '',
`datepaiement` text NOT NULL,
`codeplanteur` varchar(150) NOT NULL default '',
`nbrelevement` varchar(150) NOT NULL default '',
`modepaiement` varchar(150) NOT NULL default '',
`netpayer` varchar(150) NOT NULL default '',
`bank` text NOT NULL,
`poidstotaleleve` varchar(150) NOT NULL default '',
`tsModif` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `id_2` (`id`),
KEY `id_3` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
--
-- Contenu de la table `donnees`
--
INSERT INTO `donnees` VALUES (1, 'PALMAFRIQUE', 'PALMAFRIQUE', 'Janvier', '25', '23-10-2009', 'DADIS', '5', '15000', '127825', '', '1212', '2009-10-23 08:58:45');
INSERT INTO `donnees` VALUES (2, 'PALMAFRIQUE', 'PALMAFRIQUE', 'Janvier', '25', '23-10-2009', 'KONE', '1', 'Virement', '4545', '', '12', '2009-10-23 08:59:30');
INSERT INTO `donnees` VALUES (3, 'FFF', '', 'Janvier', '25', 'GGFG', 'FE', '1', 'Virement', 'FFE', 'BICICI', 'FF', '2009-10-23 08:59:30');
INSERT INTO `donnees` VALUES (4, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'KOFFI', '1', 'Chèque', '8325', 'VERSUS BANK', '333', '2009-10-23 09:08:15');
INSERT INTO `donnees` VALUES (5, 'PALMAFRIQUE', 'palmafrique', 'Novembre', '25', '23-10-2009', 'KONAN', '15', 'Espece', '300000', 'BICICI', '12000', '2009-10-23 09:10:21');
INSERT INTO `donnees` VALUES (6, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'KOUASSI', '1', 'Cheque', '25000', 'ECOBANK', '1000', '2009-10-23 09:11:09');
INSERT INTO `donnees` VALUES (7, 'PALMAFRIQUE', 'palmafrique', 'Mai', '25', '23-10-2009', 'CAMARA', '10', 'Autres', '1581275', 'SGBCI', '63251', '2009-10-23 10:06:15');
INSERT INTO `donnees` VALUES (8, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'JUSTIN', '1', 'Espece', '36350', 'ECOBANK', '1454', '2009-10-23 10:20:14');
INSERT INTO `donnees` VALUES (9, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'JUSTIN', '3', 'Espece', '1364675', 'SIB', '54587', '2009-10-23 10:29:56');
Merci d’AVANCE
En fait, il y a un problème avec la requête ($sql='SELECT * FROM table GROUP BY champ ORDER BY id DESC';). Le problème est que la requête n’affiche pas le dernier enregistrement lorsqu’il y a plusieurs enregistrements pour le même « code planteur ». Je ne sais pas comment résoudre cette difficulté. Par exemple pour le code planteur « JUSTIN », il y a 2 enregistrements mais au lieu d’afficher celui dont le id=9 c’est celui dont le id=8 qu’il affiche.
Voici ma table et son contenu afin de vous permettre de mieux m’aider.
CREATE TABLE `donnees` (
`id` int(11) NOT NULL auto_increment,
`motcle` text NOT NULL,
`codeentreprise` varchar(150) NOT NULL default '',
`mois` varchar(150) NOT NULL default '',
`prixAchat` varchar(150) NOT NULL default '',
`datepaiement` text NOT NULL,
`codeplanteur` varchar(150) NOT NULL default '',
`nbrelevement` varchar(150) NOT NULL default '',
`modepaiement` varchar(150) NOT NULL default '',
`netpayer` varchar(150) NOT NULL default '',
`bank` text NOT NULL,
`poidstotaleleve` varchar(150) NOT NULL default '',
`tsModif` timestamp NOT NULL default CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP,
PRIMARY KEY (`id`),
KEY `id_2` (`id`),
KEY `id_3` (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=10 ;
--
-- Contenu de la table `donnees`
--
INSERT INTO `donnees` VALUES (1, 'PALMAFRIQUE', 'PALMAFRIQUE', 'Janvier', '25', '23-10-2009', 'DADIS', '5', '15000', '127825', '', '1212', '2009-10-23 08:58:45');
INSERT INTO `donnees` VALUES (2, 'PALMAFRIQUE', 'PALMAFRIQUE', 'Janvier', '25', '23-10-2009', 'KONE', '1', 'Virement', '4545', '', '12', '2009-10-23 08:59:30');
INSERT INTO `donnees` VALUES (3, 'FFF', '', 'Janvier', '25', 'GGFG', 'FE', '1', 'Virement', 'FFE', 'BICICI', 'FF', '2009-10-23 08:59:30');
INSERT INTO `donnees` VALUES (4, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'KOFFI', '1', 'Chèque', '8325', 'VERSUS BANK', '333', '2009-10-23 09:08:15');
INSERT INTO `donnees` VALUES (5, 'PALMAFRIQUE', 'palmafrique', 'Novembre', '25', '23-10-2009', 'KONAN', '15', 'Espece', '300000', 'BICICI', '12000', '2009-10-23 09:10:21');
INSERT INTO `donnees` VALUES (6, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'KOUASSI', '1', 'Cheque', '25000', 'ECOBANK', '1000', '2009-10-23 09:11:09');
INSERT INTO `donnees` VALUES (7, 'PALMAFRIQUE', 'palmafrique', 'Mai', '25', '23-10-2009', 'CAMARA', '10', 'Autres', '1581275', 'SGBCI', '63251', '2009-10-23 10:06:15');
INSERT INTO `donnees` VALUES (8, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'JUSTIN', '1', 'Espece', '36350', 'ECOBANK', '1454', '2009-10-23 10:20:14');
INSERT INTO `donnees` VALUES (9, 'PALMAFRIQUE', 'palmafrique', 'Janvier', '25', '23-10-2009', 'JUSTIN', '3', 'Espece', '1364675', 'SIB', '54587', '2009-10-23 10:29:56');
Merci d’AVANCE
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
20 oct. 2009 à 12:30
20 oct. 2009 à 12:30
Pas besoin de deux tables pour ça.
Une simple requête te permettra d'obtenir le dernier enregistrement.
Exemple:
Cette requête va trier tes données par id décroissant et ne prendre que le premier. Autrement dit le dernier id donc le dernier enregistrement.
Tu suis ?
Une simple requête te permettra d'obtenir le dernier enregistrement.
Exemple:
$sql='SELECT * FROM table ORDER BY id DESC LIMIT 1';
Cette requête va trier tes données par id décroissant et ne prendre que le premier. Autrement dit le dernier id donc le dernier enregistrement.
Tu suis ?
Merci pour ta réponse. Mais ce que je veux est que lorsque l'utilisateur ajoute une donnée la table actuel se mette à jour automatique et la table actuel ne conserve que le dernier enregistrement de chaque code planteur.
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
20 oct. 2009 à 21:08
20 oct. 2009 à 21:08
ça je comprends bien. Hormis pour une utilisation bien particulière que tu ne précise pas ici, une requête comme celle que j'ai donné te permet d'afficher le même résultat puisqu'elle te donne le dernier enregistrement de ta table données et donc les même informations que celle que tu voudrai mettre dans la table actuel.
Donc pourquoi passer par une seconde table pour obtenir un résultat équivalent ?
Donc pourquoi passer par une seconde table pour obtenir un résultat équivalent ?
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Je m'explique. Il y a pour chaque "code planteur" plusieurs enregistrements. Prenons comme exemple 5 codes planteurs ( KONAN, KOUASSI, YAO, ZATTA, KOFFI). et donc pour chacun de ces "code planteur", il y a plusieurs enregistrements. Tous ces enregistrements sont stockés dans la table "donnees" qui constitue la table historique ensuite je veux insérer dans la table "actuel" le dernier enregistrement du code planteur "KONAN", le dernier enregistrement du code planteur "KOUASSI", le dernier enregistrement du code planteur"YAO",le dernier enregistrement du code planteur"ZATTA",le dernier enregistrement du code planteur"KOFFI",.....
Or ta requête n'affiche que le dernier enregistrement de la table données et non celui des différents "code planteur". En fait, la table "actuel" est celle que je mets à la disposition des utilisateurs. La table "donnees" est la table historique qui contient tous les enregistrements sans distinction. Ce que je veux c'est que lorsqu'on ajoute un nouvel enregistrement dans la table "donnees", le système vérifie si le "code planteur" existe dans la table "actuel". S'il existe alors l'ancien enregistrement est écrasée par la nouvelle. S'il n'existe pas alors il est ajouté à la table "actuel".
Aidez moi, cela fait plusieurs semaines que je n'arrive pas à mettre une telle requête en place.
Or ta requête n'affiche que le dernier enregistrement de la table données et non celui des différents "code planteur". En fait, la table "actuel" est celle que je mets à la disposition des utilisateurs. La table "donnees" est la table historique qui contient tous les enregistrements sans distinction. Ce que je veux c'est que lorsqu'on ajoute un nouvel enregistrement dans la table "donnees", le système vérifie si le "code planteur" existe dans la table "actuel". S'il existe alors l'ancien enregistrement est écrasée par la nouvelle. S'il n'existe pas alors il est ajouté à la table "actuel".
Aidez moi, cela fait plusieurs semaines que je n'arrive pas à mettre une telle requête en place.
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
21 oct. 2009 à 11:31
21 oct. 2009 à 11:31
Je comprends mieux.
Tu peux toujours le faire à partir d'une seule et même table en fait.
La différence avec cette requête:
Je groupe la lecture des données par champ (à remplacer par la colonne correspondant au nom de code planteur).
ORDER BY me donnera le dernier pour chaque code planteur.
Si tu as une colonne correspondant à la date, tu peux aussi trier par date ce qui reviendrai au même.
Je pense que ça correspondra mieux à ce que tu veux.
Tu peux toujours le faire à partir d'une seule et même table en fait.
$sql='SELECT * FROM table GROUP BY champ ORDER BY id DESC';
La différence avec cette requête:
Je groupe la lecture des données par champ (à remplacer par la colonne correspondant au nom de code planteur).
ORDER BY me donnera le dernier pour chaque code planteur.
Si tu as une colonne correspondant à la date, tu peux aussi trier par date ce qui reviendrai au même.
Je pense que ça correspondra mieux à ce que tu veux.
Grand merci à toi. C'est exactement ce que je voulais. Je te dis encore une fois grand merci.
Je réfléchis maintenant à comment insérer automatiquement cette requête dans la table"actuel". Car je veux que l'insertion se fasse automatiquement dans la table "actuel" à chaque ajout à partir du formulaire.
Si tu as une idée de la manière de faire, je serai très heureux.
Je réfléchis maintenant à comment insérer automatiquement cette requête dans la table"actuel". Car je veux que l'insertion se fasse automatiquement dans la table "actuel" à chaque ajout à partir du formulaire.
Si tu as une idée de la manière de faire, je serai très heureux.
arthezius
Messages postés
3538
Date d'inscription
jeudi 15 mai 2008
Statut
Membre
Dernière intervention
11 septembre 2016
475
22 oct. 2009 à 12:01
22 oct. 2009 à 12:01
Une encore (au risque de paraître obstiné) je comprends pas pourquoi tu as besoin d'enregistrer ceci puisque la requête peut à elle seul t'afficher automatiquement ce que tu as besoin sur la page que tu veux.
Je m'explique autrement.
Si tu te sers de la requête que je t'ai donné pour afficher le dernier enregistrement pour chaque code, pour ensuite l'enregistrer dans la table actuel, pour ensuite faire une autre requête pour afficher cet enregistrement sur une page, je vois pas l'intérêt.
Je suppose que c'est ainsi que ça va te servir. Autant simplement placer ma requête directement sur cette page sans passer par une seconde table.
Ou alors il y a encore quelques choses qui m'échappe et j'aurai besoin a nouveau d'un éclaircissement.
Je m'explique autrement.
Si tu te sers de la requête que je t'ai donné pour afficher le dernier enregistrement pour chaque code, pour ensuite l'enregistrer dans la table actuel, pour ensuite faire une autre requête pour afficher cet enregistrement sur une page, je vois pas l'intérêt.
Je suppose que c'est ainsi que ça va te servir. Autant simplement placer ma requête directement sur cette page sans passer par une seconde table.
Ou alors il y a encore quelques choses qui m'échappe et j'aurai besoin a nouveau d'un éclaircissement.
OK ,Je t'explique pourquoi je dois enregistrer le résultat de la requête dans la table "actuel". Le gestionnaire de l'interface dois pouvoir exporter la table "actuel" sur son ordinateur chaque jour . Ensuite, cette table sera installée sur une autre plateforme afin que les utilisateurs la consulte en envoyant un sms avec pour mot clé "le code planteur".
La table "donnee", elle constitue la table historique. Aussi je ne sais pas pourquoi mais quand par exemple 3 fois le même code planteur, il n'affiche que le premier ou le deuxième au lieu du dernier. Selon toi où se trouve le problème?
La table "donnee", elle constitue la table historique. Aussi je ne sais pas pourquoi mais quand par exemple 3 fois le même code planteur, il n'affiche que le premier ou le deuxième au lieu du dernier. Selon toi où se trouve le problème?