Bonjour,
J'ai une liste de personne et je voudrais les mettre en relation de façon aléatoire sans qu'aucun ne puisse se retrouver seul.
exemple j'ai: a,b,c,d,e,f
je voudrais obtenir cette liste (user_id->user_dest)
a->f
b->d
c->e
d->a
e->b
f->c
et sans qu'il y ai de relation réciproque du style
a->b
b->a
J'ai commencé un code mais le problème et qu'il arrive parfois qu'un individu se retrouve tout seul.
Dans ce cas par exemple
a->b
b->d
c->a
d->e
e->c
f->? (tout le monde a déjà été distribué et "f" ne peut être mis avec lui même)
ou qu'on ai une relation reciproque :
a->b
b->d
c->a
d->c
e->f
f->? (il ne reste que "e" à distribuer alors que "e" est déjà avec f)
Voilà mon code : Merci d'avance
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46 $From = array(); $To = array(); $sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; $sql2 = mysql_query($sql) or die(mysql_error()); while ($Rowsql2 = mysql_fetch_assoc($sql2)) { array_push($From, $Rowsql2['user_id']); } $sql = "SELECT user_id FROM user_groups where group_id = '$group' order by RAND()"; $sql2 = mysql_query($sql) or die(mysql_error()); while ($Rowsql2 = mysql_fetch_assoc($sql2)) { array_push($To, $Rowsql2['user_id']); } foreach ($From as $MembreFrom) { $sql = "SELECT user_id FROM user_groups where user_dest = '$MembreFrom' and group_id = '$group'"; $sql2 = mysql_query($sql) or die(mysql_error()); while($data = mysql_fetch_array($sql2)) { $fromfirst = $data['user_id']; } foreach ($To as $Key => $Value) { if ($Value!=$fromfirst) { //pour éviter les relations réciproques if ($Value!=$MembreFrom) { //Pour éviter qu'un membre ne soit avec lui même if ($Value) { $sql = "UPDATE user_groups SET user_dest='$Value' where user_id='$MembreFrom' and group_id = '$group'"; $sql2 = mysql_query($sql) or die(mysql_error()); $To[$Key] = false; //Marque ce membre comme déjà en relation break; } } } } }
Partager