Loting
Ik zit met een klein probleempje waar ik niet uitkom.
het is inmiddels alweer 2 jaar geleden dat ik met php bezig was (en nu weer een klein beetje begonnen.)
Nu heb ik één script die members selecteerd uit het database, en koppeld aan een toegewezen team.
dit door middel van Loting.
echter worden mensen nu dubbel geloot...
nu vraag ik me af, welke fail maak ik?
Stel je hebt 4 members (ik heb er 20 ingevoerd)
Dan moet dit account dus één uniek team toegewezen krijgen...
dit is het script (Wordt automatisch gereset door de Cron settings (database tijd):
In het loterijtabel staan dus de volgende gegeven:
ID - spelersnaam
Kan iemand mij uit de brand helpen?!
gr, Manuel
Code (php)
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
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
<?php
$sql = mysql_query("SELECT * FROM `loterij`");
$nroflot = mysql_num_rows($sql);
if($nroflot < 1){$nroflot = 1;}
$a = mt_rand(1,$nroflot);
$b = mt_rand(1,$nroflot);
$c = mt_rand(1,$nroflot);
$d = mt_rand(1,$nroflot);
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$a}'");
$a = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$a->login}','Team 1')");
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$b}'");
$b = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$b->login}','Team 2')");
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$c}'");
$c = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$c->login}','Team 3')");
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$d}'");
$d = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$d->login}','Team 4')");
?>
$sql = mysql_query("SELECT * FROM `loterij`");
$nroflot = mysql_num_rows($sql);
if($nroflot < 1){$nroflot = 1;}
$a = mt_rand(1,$nroflot);
$b = mt_rand(1,$nroflot);
$c = mt_rand(1,$nroflot);
$d = mt_rand(1,$nroflot);
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$a}'");
$a = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$a->login}','Team 1')");
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$b}'");
$b = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$b->login}','Team 2')");
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$c}'");
$c = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$c->login}','Team 3')");
$sql = mysql_query("SELECT `login` FROM `loterij` WHERE `id`='{$d}'");
$d = mysql_fetch_object($sql);
mysql_query("INSERT INTO `loterijlogs`(`datum`,`naam`,`prijs`) values(NOW(),'{$d->login}','Team 4')");
?>
Graag volgende keer je code tussen [code][/code] zetten (of tussen <?php ?>)[/modedit]
Gewijzigd op 24/04/2013 19:53:31 door Nick Dijkstra
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$teamsql = "SELECT team_id FROM teams";
$teams_result = $db->query($sql);
$members_result = $db->query("SELECT member_id FROM members");
$members = array();
while ($member = $members_result->fetch_assoc()) {
$members[] = $member['member_id'];
}
$teams = array();
$max = ceil($members_result->num_rows() / $teams_result->num_rows();
while ($team = $teamresult->fetch_assoc()) {
for ($i = 1; $i <= $max; $i++) {
$member_id = rand(0, count($members) -1);
$teams[$team['team_id'][] = $members[$member_id];
unset($members[$member_id]);
}
}
?>
$teamsql = "SELECT team_id FROM teams";
$teams_result = $db->query($sql);
$members_result = $db->query("SELECT member_id FROM members");
$members = array();
while ($member = $members_result->fetch_assoc()) {
$members[] = $member['member_id'];
}
$teams = array();
$max = ceil($members_result->num_rows() / $teams_result->num_rows();
while ($team = $teamresult->fetch_assoc()) {
for ($i = 1; $i <= $max; $i++) {
$member_id = rand(0, count($members) -1);
$teams[$team['team_id'][] = $members[$member_id];
unset($members[$member_id]);
}
}
?>
Dit is even een adhoc vertaling van Delphi ($members is daar een stringlist) naar PHP, en ik ben er ook niet zeker van dat dit in PHP ook zo werkt.
Gewijzigd op 25/04/2013 14:40:18 door Ger van Steenderen
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$nummers = range ( 1, 100 );
shuffle ( $nummers );
$trekking = array_slice ( $nummers, 0, 4 );
$sql = "
SELECT
login
FROM
loterij
WHERE
id IN(" . implode ( ',', $trekking ) . ")
";
// haal de resultaten op
?>
$nummers = range ( 1, 100 );
shuffle ( $nummers );
$trekking = array_slice ( $nummers, 0, 4 );
$sql = "
SELECT
login
FROM
loterij
WHERE
id IN(" . implode ( ',', $trekking ) . ")
";
// haal de resultaten op
?>
Jan Koehoorn op 24/04/2013 21:16:07:
Als je zeker wilt weten dat elk nummer maar één keer voor kan komen, zou je zoiets kunnen doen:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$nummers = range ( 1, 100 );
shuffle ( $nummers );
$trekking = array_slice ( $nummers, 0, 4 );
$sql = "
SELECT
login
FROM
loterij
WHERE
id IN(" . implode ( ',', $trekking ) . ")
";
// haal de resultaten op
?>
$nummers = range ( 1, 100 );
shuffle ( $nummers );
$trekking = array_slice ( $nummers, 0, 4 );
$sql = "
SELECT
login
FROM
loterij
WHERE
id IN(" . implode ( ',', $trekking ) . ")
";
// haal de resultaten op
?>
Dan krijg je het volgende resultaat:
Managersnaam Team
Manuel Team 1
Manuel Team 2
Manuel Team 3
Manuel Team 4
^^ er wordt dus 1 naam geselecteerd en aan alle teams weggegeven
Toevoeging op 25/04/2013 15:19:17:
up