Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD > PHP & MySQL
PHP & MySQL Forum d'entraide sur les fonctions MySQL avec PHP. Avant de poster -> FAQ MySQL, Cours MySQL et Sources MySQL. Pour les questions concernant le moteur MySQL plutôt que les fonctions PHP, merci d'utiliser le forum MySQL.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/09/2011, 21h58   #1
Futur Membre du Club
 
Administrateur systèmes et réseaux
Inscription : novembre 2007
Messages : 146
Détails du profil
Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : novembre 2007
Messages : 146
Points : 19
Points : 19
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 :
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
Rian83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h11   #2
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h13   #3
Futur Membre du Club
 
Administrateur systèmes et réseaux
Inscription : novembre 2007
Messages : 146
Détails du profil
Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : novembre 2007
Messages : 146
Points : 19
Points : 19
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.
Rian83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h23   #4
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
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
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h26   #5
Futur Membre du Club
 
Administrateur systèmes et réseaux
Inscription : novembre 2007
Messages : 146
Détails du profil
Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : novembre 2007
Messages : 146
Points : 19
Points : 19
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 ...
Rian83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h40   #6
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
Code :
secteur_id IS NOT NULL AND secteur_id IS LIKE (%[2]%)
revient à faire :
Code :
secteur_id IS LIKE (%[2]%)
ce que je veux dire c'est que :
Code :
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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h42   #7
Membre Expert
 
Avatar de Djakisback
 
Inscription : février 2005
Messages : 1 791
Détails du profil
Informations forums :
Inscription : février 2005
Messages : 1 791
Points : 1 681
Points : 1 681
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 :
Id : 1 ; email : test@test.com ; secteur_id : [2][3] ; surface_id : [4] ; prix_id : NULL ; type_id : NULL
et comme requête :

Code :
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
Djakisback est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/09/2011, 23h43   #8
Futur Membre du Club
 
Administrateur systèmes et réseaux
Inscription : novembre 2007
Messages : 146
Détails du profil
Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : novembre 2007
Messages : 146
Points : 19
Points : 19
Citation:
Envoyé par vorace Voir le message
Code :
secteur_id IS NOT NULL AND secteur_id IS LIKE (%[2]%)
revient à faire :
Code :
secteur_id IS LIKE (%[2]%)
ce que je veux dire c'est que :
Code :
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 :
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 ...
Rian83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/09/2011, 23h49   #9
Membre émérite
 
Avatar de vorace
 
Homme
Développeur
Inscription : août 2010
Messages : 587
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 : 587
Points : 861
Points : 861
tiens :
Code :
(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é...
vorace est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 09/09/2011, 23h56   #10
Futur Membre du Club
 
Administrateur systèmes et réseaux
Inscription : novembre 2007
Messages : 146
Détails du profil
Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : novembre 2007
Messages : 146
Points : 19
Points : 19
Citation:
Envoyé par vorace Voir le message
tiens :
Code :
(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é
Rian83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2011, 19h49   #11
Futur Membre du Club
 
Administrateur systèmes et réseaux
Inscription : novembre 2007
Messages : 146
Détails du profil
Informations professionnelles :
Activité : Administrateur systèmes et réseaux

Informations forums :
Inscription : novembre 2007
Messages : 146
Points : 19
Points : 19
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 :
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)
Rian83 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 01h31.


 
 
 
 
Partenaires

Hébergement Web