djems54 Posté(e) le 18 juin 2011 Partager Posté(e) le 18 juin 2011 Bonjour, J'aimerai faire un GROUP BY (pour faire un count avec) sur un champ email, pour connaitre le nombre de nombre d'enregistrement par *@orange.fr, *@free.fr, *@gmail.com, etc... Est-possible ? Si oui, comment :) Lien vers le commentaire Partager sur d’autres sites More sharing options...
foetus Posté(e) le 18 juin 2011 Partager Posté(e) le 18 juin 2011 Moi je dis que c'est impossible à faire avec une requête SQL (même une énorme). Pourquoi? Tu as la recherche avec LIKE, mais tu dois connaître à l'avance "orange", "free" etc.. Ensuite dans ta recherche tu dois ignorer les caractères jusqu'à l'arobase (@): impossible avec la recherche SQL. (ou alors faire un truc '%@free') Enfin, SQL te retounera toujours ton champs en entier: donc pour les count c'est mort. Je vois 2 moyens: 1) Faire le traitement à côté en C/ PHP/ Autre de toutes tes lignes "SELECT * FROM XXX" 2) Peut-être passer par une extension ou un trigger voire une procédure embarquée. Si tu arrives avec cette solution, tu pourras essayer de faire cela avec 1 seule requête ensuite. Lien vers le commentaire Partager sur d’autres sites More sharing options...
mempoh Posté(e) le 18 juin 2011 Partager Posté(e) le 18 juin 2011 et un truc du genre (pas sur à 100% de la syntaxe) ? select substr(champ_mail,instr(champ_mail,'@')),count(*) from ta_table group by substr(champ_mail,instr(champ_mail,'@')) (sql plutot orienté Oracle mais devrait marcher aussi pour mysql, je crois) Lien vers le commentaire Partager sur d’autres sites More sharing options...
Fuinril Posté(e) le 19 juin 2011 Partager Posté(e) le 19 juin 2011 Même réponse que sur ton précédent sujet... C'est peut être possible, flemme de réfléchir, mais ce n'est pas un souhait de requête logique... Une requête = un ensemble, si tu dois faire des where contradictoires posent toi sérieusement des questions.... Tu veux savoir combien de mails orange : select count(*) from table where mail like '%@orange.fr'. Combien de mails orange et free ? Fais 2 requêtes. En plus dans les libs il y a des fonctions spécialement prévues pour accélérer les requêtes avec une valeur de param variant (avec des préparation de groupe de requêtes). Au final, même si c'est peut être faisable en une seule requête : _Tu vas perdre infiniment plus de temps à créer tes requêtes avec des sous, sous, sous ensemble que de faire 3 ou 4 requêtes _Le temps d'exécution sera nettement plus rapide avec plusieurs petites requêtes qu'avec une grosse bourrine nécessitant implicitement la création de temporary table _La personne qui passera derrière toi ne s'arrachera pas les cheveux à essayer de comprendre ce que tu as fait Les requêtes SQL c'est comme la littérature. Il y a Proust et ses phrases de 20 lignes, ceux qui écrivent normalement et ceux qui tentent d'imiter Proust Lien vers le commentaire Partager sur d’autres sites More sharing options...
djems54 Posté(e) le 21 juin 2011 Auteur Partager Posté(e) le 21 juin 2011 On va dire que je tente d'imiter Proust @mempoh: ta requête n'a pas fonctionné, mais je la garde sous le coude au cas où, merci Lien vers le commentaire Partager sur d’autres sites More sharing options...
cedricpc Posté(e) le 21 juin 2011 Partager Posté(e) le 21 juin 2011 Bonsoir, Voilà ce que pourrait donner la version de mempoh pour MySQL, en simplifiée : SELECT SUBSTRING(`champ_courriel`, INSTR(`champ_courriel`, '@')) AS `courriel`, COUNT(*) FROM `table` GROUP BY `courriel`; Ou encore un poil plus simple, via une variante de SUBSTRING : SELECT SUBSTRING_INDEX(`champ_courriel`, '@', -1) AS `courriel`, COUNT(*) FROM `table` GROUP BY `courriel`; La seule différence au niveau du résultat résidera dans la présence – dans le premier cas – ou non – dans le second cas – de l'arobase, en admettant que les adresses ne contiennent bien sûr qu'une seule arobase, sinon il en sera tout autre. Voilà, même si a priori, tu as résolu ton problème, ça pourra toujours servir si quelqu'un passe par là et veux la version MySQL. Bonne fin de journée, début de soirée. Lien vers le commentaire Partager sur d’autres sites More sharing options...
Messages recommandés
Archivé
Ce sujet est désormais archivé et ne peut plus recevoir de nouvelles réponses.