mysql, group by, distinct, cakephp

15370
,

Bonjour,

Depuis j'ai un soucis avec mysql je n'arrive pas à faire des requetes groupées sur une table

Ce que je fais

Voici la structure de ma table

CREATE TABLE `colis` (
  `id` int(11) NOT NULL,
  `frais` int(11) NOT NULL,
  `nom_expediteur` varchar(255) NOT NULL,
  `telephone_expediteur` varchar(255) NOT NULL,
  `nom_destinataire` varchar(255) NOT NULL,
  `telephone_destinataire` varchar(255) NOT NULL,
  `valeur` int(11) NOT NULL,
  `nature` text NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified` datetime DEFAULT NULL,
  `etat` int(11) DEFAULT '1',
  `user_id` int(11) NOT NULL,
  `agence_id` int(11) NOT NULL,
  `agence_id1` int(11) NOT NULL,
  `code_colis` varchar(255) DEFAULT NULL,
  `residence_expediteur` varchar(100) DEFAULT NULL,
  `slug` varchar(500) DEFAULT NULL,
  `nom_autre_destinataire` varchar(255) DEFAULT NULL,
  `prenom_autre_destinataire` varchar(255) DEFAULT NULL,
  `numero_autre_destinataire` varchar(255) DEFAULT NULL,
  `phone_autre_destinataire` varchar(255) DEFAULT NULL,
  `date_retrait` datetime DEFAULT NULL,
  `lieu_payement` varchar(100) DEFAULT NULL,
  `type_payement` varchar(100) DEFAULT NULL,
  `provenance` varchar(100) DEFAULT 'online',
  `numero_facture` int(11) DEFAULT NULL,
  `passage` int(11) DEFAULT NULL,
  `cloture_caisse` int(11) DEFAULT '0',
  `idsession` varchar(100) DEFAULT NULL,
  `date_reception` timestamp NOT NULL DEFAULT '0000-00-00 00:00:00',
  `agent_retrait` int(11) DEFAULT '0',
  `sync` int(11) DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;


CREATE TABLE `agences` (
  `id` int(11) NOT NULL,
  `nom_agence` varchar(255) NOT NULL,
  `ville` varchar(255) NOT NULL,
  `localisation` varchar(255) NOT NULL,
  `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP,
  `modified` datetime DEFAULT NULL,
  `etat` int(11) NOT NULL DEFAULT '1',
  `entreprise_id` int(11) NOT NULL,
  `phone` varchar(255) DEFAULT NULL,
  `sync` int(11) NOT NULL DEFAULT '0'
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

voici le code SQL que je fais

$conn->execute('SELECT DISTINCT(code_colis) as code_colis, frais, code_colis,nature,nom_agence,telephone_expediteur,colis.created,colis.slug,nom_expediteur,nom_destinataire,colis.etat,type_payement FROM colis,agences WHERE colis.agence_id = agences.id AND colis.id  ORDER BY code_colis ASC')->fetchAll('assoc')

Ce que je veux

je veux la liste groupé par code colis par agence

Ce que j'obtiens

Error: SQLSTATE[42000]: Syntax error or access violation: 1055 Expression #1 of SELECT list is not in GROUP BY clause and contains nonaggregated column 'mybd.Colis.frais' which is not functionally dependent on columns in GROUP BY clause; this is incompatible with sql_mode=only_full_group_by

28 Réponse

2
15370
,

déjà l'ID est identique et c'est la clé elle est auto increment. pour le code c'est juste un code comme vous le dite mais qui n'est pas unique(c'est une exigence), concernant les autres champs, j'arrive à les gérer dans d'autres requêtes mais ici je ne comprends pas le pourquoi cela ne passe pas par contre sous sql server cà passe bien

112438
,

??? je ne comprends plus rien : id identique ? alors que c une clé ai ?? concernant le code, comment est-il généré ?
as tu pris en compte mon dernier post sur ta table colis ?

112438
,

pourrais tu m'expliquer ton app : c un site de vente ?
quelles sont tes contraintes, etc...

15370
,

je veux dire que l'id est la clé c'est une erreur les éléments sont auto increment

15370
,

mon App est une plate forme de gestion des colis des agences de voyages qui fonctionne déjà en intranet mais il y'a des mises à jours je doit faire conernant les factures c'est dessus je suis entrain de finaliser sauf que la il y'a e probleme avec mysql

112438
,

.... tu as accès aux DB ? tu peux les modifier ?
en fait, au final, tu voudrais récupérer les propositions qui ont été retenues pour les facturer ?

112438
,

si ça fonctionne en intra.... tu as une autre plate-forme à gérer ?

112438
,

bon, j'arrête, désolé. si tu veux continuer envoie une image de tes tables (avec relations). sinon je ne vois plus comment t'aider...

2