Bonjour,

Voila je rencontre un petit de conception.

Ce que je pense faire

Je dois crée un système permettant de parrainer l’inscription de nouveaux
utilisateurs

Donc j'aurais une table USER et une table sponsorships :

USER
id
email
firstname
lastname
password

SPONSORSHIPS
id
id_user ( le parrain)
id_filleul (le parrainé) et ( la personne sera save dans uset)

ont aura USER en has_many et SPONSORSHIP belong_to

Je voudrais savoir si vous avez d'une meilleur solution au niveau de l'organisation

Merci d'avance

6 réponses


mitnick93150
Auteur
Réponse acceptée

Oui c'est des requêtes différents mais ce que je veux dire c'est que avec ta solution je réponds réponds a tous les problématiques dit plus haut

Tu peux simplement mettre un id_filleul dans ta table USER

oui mais un user peux avoir plusieurs filleul dans cas je suis obligé de crée une table rien que pour le parrainage.

Je voulait dire l'id du parrain, désolé ^^'

ok il me semble que ta solution je peux répondre à mes fonctionnalité qui sont :

  • Trouver le parrain initial à l’origine de l’inscription d’un utilisateur
  • Réorganiser l’arborescence en cas de suppression d’un utilisateur
  • Trouver tous les utilisateurs qui ont parrainé plus de x utilisateurs
  • Trouver tous les utilisateurs qui n’ont parrainé personne
  • Lister les x utilisateurs ayant parrainé le plus grand nombre de personnes

Mais j'essaye de voir si je vais pas m'enfermer dans un truc bien compliqué si je dois le faire évoluer.

Ca reste des requêtes différentes.

  • Trouver le parrain initial à l’origine de l’inscription d’un utilisateur => id_parrain
  • Réorganiser l’arborescence en cas de suppression d’un utilisateur => A la suppression, tu ajoutes un id_parrain = NULL WHERE id_parrain = idutilisateur
  • Trouver tous les utilisateurs qui ont parrainé plus de x utilisateurs => SELECT COUNT() as count , id_parrainFROM USER WHERE id_parrain IS NOT NULL GROUP BY id_parrain HAVING COUNT() > X
  • Trouver tous les utilisateurs qui n’ont parrainé personne => Pareil que la précédente, mais avec id_parrain IS NULL
  • Lister les x utilisateurs ayant parrainé le plus grand nombre de personnes => SELECT COUNT(), id_parrain as count FROM USER WHERE id_parrain IS NOT NULL GROUP BY id_parrain ORDER BY COUNT() DESC LIMIT X