IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Requêtes MySQL Discussion :

SELECT aléatoire relativement à un nom de domaine(chaine)


Sujet :

Requêtes MySQL

  1. #1
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut SELECT aléatoire relativement à un nom de domaine(chaine)
    Bonjour,
    J'ai un script PHP qui va envoyer un mail à chaque abonné de ma Newsletter, les mails sont une table MySQL :
    mails(mail, nom, prenom)
    La colonne mail est de type varchar(100) et est unique.

    Afin d'éviter que mon serveur soit pris pour un spammeur, je voudrais éviter l'envoi successifs de mails d'un même fournisseurs. Exp :
    mail1@yahoo.fr
    mail2@yahoo.fr
    mail3@yahoo.fr
    mail4@gmail.com
    mail5@gmail.com
    ...
    Donc ça ce que me donne une requête SELECT mail FROM mails
    Ce que je voudrais, c'est une requête qui me retourne qq chose comme ça :
    mail1@yahoo.fr
    mail4@gmail.com
    mail2@yahoo.fr
    mail5@gmail.com
    mail3@yahoo.fr
    Donc en résumé, il faut faire un tri aléatoire sur le nom de domaine.
    J'ai pu faire ceci pour récupérer les noms de domaines :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT mail, 
    SUBSTRING(mail, POSITION('@' IN mail)) AS domaine 
    FROM `mails`
    mais je n'ai pas trouvé comment faire un tri aléatoire sur le nom de domaine !! Une idée svp ??
    Merci
    '...parfois l'informatique peut vous rendre fou...'

  2. #2
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Saluton,
    Autant demander à PHP (via shuffle()) de mélanger le tableau constitué en parcourant le résultat de la requête.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  3. #3
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    Le problème c'est que j'ai environ 10 000 mails, je ne vais quand même pas stocker ça dans un tableau PHP !! En plus l'envoi se fait par tranche de N mails à la fois ! Donc je récupère N mails de puis la table mails et je les envois, ensuite les 100 suivants ... donc il est très probable que la 1ère requête me retourne des mails du même domaine !!!
    '...parfois l'informatique peut vous rendre fou...'

  4. #4
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mail, 
      SUBSTRING(mail, POSITION('@' IN mail)) AS domaine 
    FROM `mails` 
    ORDER BY RAND(domaine)
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  5. #5
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    j'ai déjà essayé : la fonction RAND n'accepte que des valeurs directe, elle veut pas qu'on lui donne des nom de colonnes !! bizarre quand même ...
    '...parfois l'informatique peut vous rendre fou...'

  6. #6
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par sami_c Voir le message
    Le problème c'est que j'ai environ 10 000 mails, je ne vais quand même pas stocker ça dans un tableau PHP !! En plus l'envoi se fait par tranche de N mails à la fois ! Donc je récupère N mails de puis la table mails et je les envois, ensuite les 100 suivants ... donc il est très probable que la 1ère requête me retourne des mails du même domaine !!!
    Et comment vas-tu t'assurer que tu ne pas récupérer les mêmes mails dans les extractions aléatoires successives ?
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  7. #7
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    j'ai bien spécifié dans mon 1er post que le mail est unique !!
    '...parfois l'informatique peut vous rendre fou...'

  8. #8
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    Citation Envoyé par sami_c Voir le message
    j'ai bien spécifié dans mon 1er post que le mail est unique !!
    Certes, mais des SELECT successifs avec ORDER BY RAND peuvent très bien retourner le même mail chacun dans leur lot.
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  9. #9
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    ça c'est un autre pb que je peux résoudre en marquant les mails envoyé, donc j'ajouterais dans le SELECT ... WHERE date_envoi IS NULL
    '...parfois l'informatique peut vous rendre fou...'

  10. #10
    Membre expert
    Avatar de Maljuna Kris
    Homme Profil pro
    Retraité
    Inscrit en
    Novembre 2005
    Messages
    2 613
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Finistère (Bretagne)

    Informations professionnelles :
    Activité : Retraité
    Secteur : Administration - Collectivité locale

    Informations forums :
    Inscription : Novembre 2005
    Messages : 2 613
    Points : 3 950
    Points
    3 950
    Par défaut
    As-tu essayé cela
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mail
      AS domaine 
    FROM `mails` 
    ORDER BY RAND(SUBSTRING(mail, POSITION('@' IN mail)))
    Kie lumo eksistas ankaŭ ombro troviĝas. L.L. Zamenhof
    articles : Comment émuler un tableau croisé [quasi] dynamique
    et : Une énigme mathématique résolue avec MySQL
    recommande l'utilisation de PDO (PHP5 Data Objects)

  11. #11
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    voilà ce que ça donne :
    #1210 - Mauvais arguments à RAND
    bizarre que RAND n'accepte pas de fonction comme argument ! il ne veut que des valeurs directe !
    '...parfois l'informatique peut vous rendre fou...'

  12. #12
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    RAND demande un argument numérique. La technique de Maljuna Kris retourne une chaîne de caractères.

    Essaie ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT mail
      AS domaine 
    FROM `mails` 
    ORDER BY RAND(LOCATE('@', mail))
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  13. #13
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    même message d'erreur !! En fait il est vrai que RAND demande un argument numérique, cependant il semble qu'elle n'accepte que des constantes ! c-a-d impossible de lui filer une expression à évaluer !!
    '...parfois l'informatique peut vous rendre fou...'

  14. #14
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Chez moi cette syntaxe fonctionne ! Attention au nombre de parenthèses !
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

  15. #15
    Membre averti Avatar de sami_c
    Profil pro
    Chef de projet
    Inscrit en
    Mai 2002
    Messages
    751
    Détails du profil
    Informations personnelles :
    Localisation : Tunisie

    Informations professionnelles :
    Activité : Chef de projet

    Informations forums :
    Inscription : Mai 2002
    Messages : 751
    Points : 370
    Points
    370
    Par défaut
    j'ai bien testé de nouveau et ça ne marche pas !!
    Ma version de mysql est la "5.0.45-community-nt-log", la tienne c'est quoi ?
    '...parfois l'informatique peut vous rendre fou...'

  16. #16
    Modérateur

    Avatar de CinePhil
    Homme Profil pro
    Ingénieur d'études en informatique
    Inscrit en
    Août 2006
    Messages
    16 799
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Ingénieur d'études en informatique
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2006
    Messages : 16 799
    Points : 34 031
    Points
    34 031
    Billets dans le blog
    14
    Par défaut
    Et quel est le message d'erreur retourné ?
    Philippe Leménager. Ingénieur d'étude à l'École Nationale Supérieure de Formation de l'Enseignement Agricole. Autoentrepreneur.
    Mon ancien blog sur la conception des BDD, le langage SQL, le PHP... et mon nouveau blog sur les mêmes sujets.
    « Ce que l'on conçoit bien s'énonce clairement, et les mots pour le dire arrivent aisément ». (Nicolas Boileau)
    À la maison comme au bureau, j'utilise la suite Linux Mageïa !

Discussions similaires

  1. Réponses: 1
    Dernier message: 04/04/2015, 17h06
  2. [XL-2007] Renvoi aléatoire de noms d'une chaine de caractères
    Par Debinfo75 dans le forum Macros et VBA Excel
    Réponses: 9
    Dernier message: 13/05/2011, 03h29
  3. Réponses: 1
    Dernier message: 05/01/2010, 20h20
  4. Récupérer le nom de domaine d'appartenance d'un serveur
    Par Laurent Dardenne dans le forum Windows
    Réponses: 2
    Dernier message: 26/01/2004, 17h01
  5. ip fixeou nom de domaine sur ordi perso
    Par windob dans le forum Développement
    Réponses: 15
    Dernier message: 14/01/2004, 10h49

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo