|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Futur Membre du Club
![]() Administrateur systèmes et réseaux Inscription : novembre 2007 Messages : 146 ![]() |
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 .... Avez vous une idée de comment faire pour ce que je veux ? Je vous remercie beaucoup d'avance |
|
|
00
|
|
|
#2 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
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é... |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Administrateur systèmes et réseaux Inscription : novembre 2007 Messages : 146 ![]() |
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. |
|
|
00
|
|
|
#4 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 791 ![]() |
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 |
|
|
00
|
|
|
#5 |
|
Futur Membre du Club
![]() Administrateur systèmes et réseaux Inscription : novembre 2007 Messages : 146 ![]() |
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 ... |
|
|
00
|
|
|
#6 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
Code :
secteur_id IS NOT NULL AND secteur_id IS LIKE (%[2]%) ce que je veux dire c'est que : 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é... |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Inscription : février 2005 Messages : 1 791 ![]() |
Je suis pas un accro de l'atomicité des données
Sinon si on reprend : Code :
Id : 1 ; email : test@test.com ; secteur_id : [2][3] ; surface_id : [4] ; prix_id : NULL ; type_id : NULL Code :
Select email From table_alert WHERE (secteur_id LIKE(%[2]%) OR secteur_id LIKE(%[3]%)) AND surface_id LIKE(%[4]%);
__________________
Vive les roues en pierre |
|
|
10
|
|
|
#8 | |
|
Futur Membre du Club
![]() Administrateur systèmes et réseaux Inscription : novembre 2007 Messages : 146 ![]() |
Citation:
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]%) @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 ... |
|
|
|
00
|
|
|
#9 |
|
Membre émérite
![]() Développeur Inscription : août 2010 Messages : 587 ![]() |
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é... |
|
|
10
|
|
|
#10 | |
|
Futur Membre du Club
![]() Administrateur systèmes et réseaux Inscription : novembre 2007 Messages : 146 ![]() |
Citation:
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é |
|
|
|
00
|
|
|
#11 |
|
Futur Membre du Club
![]() Administrateur systèmes et réseaux Inscription : novembre 2007 Messages : 146 ![]() |
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) |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com