Requete selon criteres

Requete selon criteres - PHP - Programmation

Marsh Posté le 25-04-2011 à 21:18:38    

Bonjour,
 
J'ai un site ou mes client peuvent créer des alertes et dès qu'un produit correspondant à leurs critères est déposé, ils reçoivent un email.
 
La table qui stocke les alertes est composée de cette façon:
 
id categorie_id couleur_id taille_id
1       0                  5           2
2       0                  5           0
 
 
 
Je souhaite que lors du dépôt d'un nouveau produit par un client, une requête soit lancée pour sélectionner toutes les entrées qui correspondent aux critères du produit déposé (couleur, taille, catégorie, etc..)
 
Un petit exemple sera plus parlant:
 
Un client dépose un objet dans la catégorie "chaussures", de couleur "bleu" et de taille "44"
 
Résultat = envoyer un mail aux personnes ayant créer l'alerte (j'utilise les id) : categorie = chaussure, couleur = "bleu" mais aussi à ceux qui ont juste précisé la catégorie "chaussure" et la couleur "bleu".
 
Une aide est la bienvenue car je ne vois pas comment aborder ce problème.


Message édité par pipo83 le 25-04-2011 à 21:19:56
Reply

Marsh Posté le 25-04-2011 à 21:18:38   

Reply

Marsh Posté le 25-04-2011 à 21:41:25    

Il te faut une table qui stocke les souhaits déposés par les utilisateurs.
 

id  |  user_id  |  categorie  |  couleur  |   taille
----------------------------------------------------


 
Des qu'un utilisateur dépose un objet, tu fais une requête dans la table des souhaits, et tu regardes quels utilisateurs ont fait un souhait qui peut correspondre.
 
SELECT email
FROM users
INNER JOIN souhaits ON user.id = souhaits.user_id
WHERE categorie = $categorie  
OR couleur = $couleur  
OR taille = $taille
 
Apres tu peux bidouiller et combiner les conditions du WHERE pour affiner.


Message édité par Pascal le nain le 25-04-2011 à 21:43:46
Reply

Marsh Posté le 25-04-2011 à 21:51:09    

Merci Pascal pour ta réponse, mais mon problème est autre.
 
Je vais essayer de passer par un exemple pour etre plus clair:
 
Un vendeur crée un article dans la categorie chaussure, de couleur bleu et de taille 44.
J'ai donc :  
categorie = chaussure
couleur = bleu
taille = 44
 
Je cherche donc a sélectionner toutes les entrées (de ma table alertes) dont les 3 correpondent aux parametres plus haut, mais aussi ceux qui n'ont renseigné que la categorie par exemple.
 

Reply

Marsh Posté le 25-04-2011 à 22:36:15    

A quoi correspond ta table alertes ? Puisque tu envoies des emails, il est inutile de les stocker dans une base...

Reply

Marsh Posté le 25-04-2011 à 22:52:33    

Je les stocke dans une table car un client peut créer ou consulter des alertes dans son compte client.
 
Ma table alertes est composée de cette façon :
 
id  |   categorie_id    |   couleur_id   |  taille_id
1              2                      5                  2
2              0                      5                  0
3              5                      0                  0
 
Donc si le nouvel article déposé contient les paramètres suivants:
categorie = 5, couleur = 5, taille = 2
 
Alors:
Enregistrement 1 = pas de mail (condition des 3 params non remplie)
Enregistrement 2 = envoi mail (car couleur = 5)
Enregistrement 3 =  envoi mail (car categorie = 5)

Reply

Marsh Posté le 26-04-2011 à 11:10:26    

Dans ce cas c'est deux tables qu'il te faut.
Il te faut la table que j'ai citee plus haut, et une table pour stocker les alertes. Simplement, en plus d'envoyer un email tu ajoutes une entree a ta base "alertes".
 
Je verrai plutot la table alerte ainsi :
 

id   |   user_id    |   product_id
----------------------------------


 
Ainsi, quand un nouveau produit est ajouté, on cherche dans la table des souhaits quels utilisateurs peuvent être intéressés.
Pour les utilisateurs qui s'avèrent intéressés, tu ajoutes une entrée dans ta table d'alertes.
Ainsi, quand l'utilisateur se connectera, il te suffira d'afficher les enregistrements dont le champs user_id lui correspond.
 
SELECT nom, photo, lien, etc
FROM produit
INNER JOIN alertes ON alertes.product_id = produit.id
WHERE alertes.user_id = $id
GROUP BY produit.id


Message édité par Pascal le nain le 26-04-2011 à 11:16:19
Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed