Structure de table pour statistique

WRInaute discret
Bonjour,
je réalise sous php/mysql, un site web type réseaux sociaux/rencontres et je gère les statistiques concernant les visites entre membres :
quel membre a vu ma fiche
quelle fiche de membre j'ai déjà vu (parcouru)

Pour ca j'ai créé une table Statistique (#id_membre, liste_membre_qui_mon_vu, liste_membre_que_jai_parcouru)
avec les valeurs sous la forme : liste_membre_qui_mon_vu = "3,2,45,448,8889,..."

es-ce une mauvaise idée de concevoir les choses comme ca dans le cas ou il y aurait un millier de membres qui ont visités ma fiche ?

Merci d'avance pour votre aide
 
WRInaute accro
Ca ne me semble effectivement pas une bonne idée comme source de données initiale. Une simple table (visiteur,visité) devrait largement suffire (avec éventuellement d'autres champs comme la date de la visite, ou le nombre de visites) me semble nettement plus souple, et plus rapide à mettre à jour. Ensuite, avec de bons index (un sur chaque colonne), tu pourras facilement récupérer les listes que tu veux (en imposant éventuellement des limites sur le nombre de visiteurs/visités que tu veux).

Jacques.
 
WRInaute discret
Merci pour ta réponse, ca m'a bien orienté, d'autant plus que l'info sur l'heure de visite est importante. J'y vois plus clair et j'ai réussi a faire un schéma bien plus adapté.

Encore merci
 
WRInaute discret
Bonsoir,

Alors j'ai utilisé ce genre de truc (des listes dans un champ text) en MySQL jusqu'à récemment, et fait c'est une très mauvaise façon de faire. C'est plus intuitif lorsqu'on n'est pas familier de MySQL mais ce n'est vraiment pas optimal. En plus dans ton cas, comme il y aurait deux listes ça n'est vraiment pas du tout efficace.

Donc, voilà comment je ferais (c'est ce que propose jcaron) :
2 colonnes Int dans la table statistique : id_membre1 et id_membre2, une clé primaire sur les deux champs (id_membre1, id_membre2).
Si A voit la fiche de B tu fais un

Code:
INSERT IGNORE INTO statistique (id_membre1, id_membre2) VALUES (id_A, id_B)

Pour connaitre les membres qui ont vu B tu fais :

Code:
SELECT id_membre1 FROM statistique WHERE id_membre2 = id_B

Et pour connaitre les membres que A a vus tu fais :

Code:
SELECT id_membre2 FROM statistique WHERE id_membre1 = id_A

Tu peux potentiellement avoir beaucoup de lignes dans ta table (le nombre de membres au carré) mais c'est quand même beaucoup plus efficace en terme de place et surtout c'est plus propre qu'une solution avec des listes. Tu peux par exemple facilement rajouter un champ "compteur" pour compter le nombre de fois ou chaque profil a été vu par chaque membre avec

Code:
INSERT INTO statistique (id_membre1, id_membre2, compteur) VALUES (id_A, id_B, 1) ON DUPLICATE KEY UPDATE compteur = compteur+1
 
Discussions similaires
Haut