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

PHP & Base de données Discussion :

Alerte e-mail avec plusieurs critères [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut Alerte e-mail avec plusieurs critères
    Bonsoir à tous,

    J'ai un léger soucis pour un site internet que je suis en train de faire.

    Je dois créer un script d'alerte par mail dès qu'une annonce est ajouté.
    Le soucis c'est que c'est un système d'alerte multi critères avec une possibilité qu'un critère soit nul.

    Le soucis c'est que je n'arrive pas à trouvé une requête qui puisse me permettre de récupéré tous les tuples qui correspondent à l'ajout de l'annonce.

    Ma table qui contient toutes les demande d'alerte est de ce type, mais peux changé (:
    id, email, secteur_id (varchar), surface_id (varchar), prix_id (varchar), type_id (varchar)

    J'ai mis des champs varchar car je voulais mettre un liste de critère pour chaque elements tel les secteurs, les prix, etc ...

    Exemple d'un champ : secteur_id : [2][4]

    Cela correspond à l'id 2 et 4 pour les secteurs, cela veux dire que la personne veux être alerté dès qu'un ajout sur le secteur 2 ou 4 est effectué.
    Il peux aussi être nul car cela lui est égale.


    Exemple d'un tuple :
    Id : 1 ; email : test@test.com ; secteur_id : [2][3] ; surface_id : [4] ; prix_id : NULL ; type_id : NULL

    Voici les tuples secteur :
    id : 2 ; name : Bandol
    id : 3 ; name : Toulon
    id : 4 ; name : Sanary
    ...

    Tuples surface :
    id : 1 ; name = 1 piece
    id : 2 ; name = 2 pieces
    id : 3 ; name = 3 ou 4 pieces
    id : 4 ; name = 5 pieces ou plus

    Donc la, la personne a pour email test@test.com, elle veux etre alerté dès qu'un annonce pour Bandol ou Toulon est ajouté et qu'elle ai 5 pieces ou plus.


    J'avais un debut de requête mais qui malheureusement ne fonctionne pas :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select email From table_alert WHERE secteur_id IS NOT NULL AND secteur_id IS LIKE (%[2]%) AND prix_id IS NOT NULL AND prix_id IS LIKE(%[1]%) etc ....
    Ici le 2 pour le like de secteur_id correspond à l'id 2 du secteur de l'annonce ajouté.

    Avez vous une idée de comment faire pour ce que je veux ?

    Je vous remercie beaucoup d'avance

  2. #2
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    je ne vois pas l’intérêt d'être alerté de l'ajout d'une annonce selon son prix ou sa surface seulement, à mon avis tu devrais faire un premier tri sur le secteur, donc si le secteur de l'annonce correspond aux secteurs de l'utilisateur à alerter puis éventuellement classer les annonces par pertinence, surface proche de la surface de l'utilisateur, puis prix etc...
    Développeur informatique contrarié...

  3. #3
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Car à vrai dire, il n'est pas obligé de définir le secteur puisque c'est un site pour le var, donc si le secteur ne le dérange pas, il laisse vide.

    Bah être alerté dès qu'un bien entre 200 000 et 300 000€ est ajouté j'aimerai le savoir car c'est mon budget par exemple, peu importe la surface ou le lieu.

  4. #4
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Salut,
    j'ai lu plusieurs fois ton post mais toujours pas sûr d'avoir compris, en particulier le problème du null. Pourquoi tu mets pas des OR dans ta requête ?
    En tout cas, si tu peux changer ton modèle de données, hésites pas
    Vive les roues en pierre

  5. #5
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Salut
    Car si le champ est nul, je ne dois pas le prendre en compte sinon ca peu faire foiré la requête.
    Si il a le critère de prix et de surface, il faut que ca corresponde au deux, et pas à l'un OU l'autre. Et là est le pb, il faut que se soit non nul pour que je le test et tous ceux qui sont non nul doivent etre respecté.

    Et bien j'ai fait moi même cette modélisation, mais je peux changé. J'avais pensé à des set pour chaque critère où je n'avais plus qu'à testé l'appartenance au set, mais si on ajoute un critère, c'est la cata ...

  6. #6
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS NOT NULL AND secteur_id IS LIKE (%[2]%)
    revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS LIKE (%[2]%)
    ce que je veux dire c'est que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS LIKE (%[2]%)
    implique que secteur_id n'est pas null, à moins que tu ai null[2][5] comme valeurs ce que je doute fort...
    Développeur informatique contrarié...

  7. #7
    Membre émérite Avatar de Djakisback
    Profil pro
    Inscrit en
    Février 2005
    Messages
    2 021
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 2 021
    Points : 2 278
    Points
    2 278
    Par défaut
    Je suis pas un accro de l'atomicité des données mais sur ce coup-là ça pourrait valoir le coup de diviser en 2 tables.

    Sinon si on reprend :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Id : 1 ; email : test@test.com ; secteur_id : [2][3] ; surface_id : [4] ; prix_id : NULL ; type_id : NULL
    et comme requête :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Select email From table_alert WHERE (secteur_id LIKE(%[2]%) OR secteur_id LIKE(%[3]%)) AND surface_id LIKE(%[4]%);
    ça te retourne pas le résultat attendu ?
    Vive les roues en pierre

  8. #8
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par vorace Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS NOT NULL AND secteur_id IS LIKE (%[2]%)
    revient à faire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS LIKE (%[2]%)
    ce que je veux dire c'est que :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS LIKE (%[2]%)
    implique que secteur_id n'est pas null, à moins que tu ai null[2][5] comme valeurs ce que je doute fort...
    Ah pas besoin de faire un test sur null ?

    Mais donc si je fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    secteur_id IS LIKE (%[2]%) and prix_id IS LIKE (%[1]%) and surface_id IS LIKE (%[2]%) and type_id IS LIKE (%[4]%)
    si il y en a un qui est null, ca ne va pas géné ma requete et je récupérerai les résultats ?

    @Djakisback : Avec cette requête, je n'ai pas essayé. J'étais parti sur l'idée qu'il fallait un test pour le null.
    Je test ca demain matin normalement et je vous tiens au courant, là, le marchand de sable me rattrape et n'ayant pas envie de dire des bêtises et de réfléchir correctement, je vais pioncé

    En tout cas merci pour vos réponses, j'essaye ca demain et je vous tiens au courant, si ca marche, j'aurai l'air d'un con quand même ...

  9. #9
    Membre éprouvé Avatar de vorace
    Homme Profil pro
    Développeur
    Inscrit en
    Août 2010
    Messages
    573
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Meurthe et Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Août 2010
    Messages : 573
    Points : 915
    Points
    915
    Par défaut
    tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (secteur_id IS LIKE (%[2]%) or secteur_id IS NULL) and (prix_id IS LIKE (%[1]%) or prix_id IS NULL) and (surface_id IS LIKE (%[2]%) or surface_id IS NULL) and (type_id IS LIKE (%[4]%) or type_id IS NULL)
    Développeur informatique contrarié...

  10. #10
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Citation Envoyé par vorace Voir le message
    tiens :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (secteur_id IS LIKE (%[2]%) or secteur_id IS NULL) and (prix_id IS LIKE (%[1]%) or prix_id IS NULL) and (surface_id IS LIKE (%[2]%) or surface_id IS NULL) and (type_id IS LIKE (%[4]%) or type_id IS NULL)
    Je suis vraiment trop nul ...
    La comme ca de tête ca fonctionne et fait ce que je veux.
    A ce que je vois, je suis un peu rouillé niveau sql depuis que j'ai changé de branche.
    Bon bah je viens confirmé ou infirmé ca demain pour clore ce message ou pas

    Merci beaucoup pour votre réactivité

  11. #11
    Membre du Club
    Profil pro
    Administrateur systèmes et réseaux
    Inscrit en
    Novembre 2007
    Messages
    146
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : Administrateur systèmes et réseaux

    Informations forums :
    Inscription : Novembre 2007
    Messages : 146
    Points : 48
    Points
    48
    Par défaut
    Je vous remercie beaucoup pour avoir planché sur mon problème qui n'en était pas vraiment un en fait.

    Voici une requête correcte si quelqu'un comme moi semble perdu

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT * FROM `table_alert` WHERE (secteur_id LIKE '%[1]%' or secteur_id IS NULL) and (prix_id LIKE '%[2]%' or prix_id IS NULL) and (surface_id LIKE '%[2]%' or surface_id IS NULL) and (type_id LIKE '%[1]%' or type_id IS NULL)

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. VBA-E Comment réaliser une recherche avec plusieurs critères ?
    Par Larsen21 dans le forum Macros et VBA Excel
    Réponses: 11
    Dernier message: 14/12/2006, 13h43
  2. Réponses: 6
    Dernier message: 14/11/2006, 10h35
  3. [Javamail] Envoi mail avec plusieurs smtp
    Par igloof dans le forum API standards et tierces
    Réponses: 1
    Dernier message: 02/11/2006, 12h08
  4. Réponses: 1
    Dernier message: 21/07/2006, 16h03
  5. Envoi d'un mail avec plusieurs pièces jointes
    Par Wilco dans le forum Composants VCL
    Réponses: 3
    Dernier message: 04/04/2006, 10h19

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