FAQ |
Kalender |
2009-08-07, 23:58 | #1 | ||
|
|||
Nykomling
|
Hejsan!
Det är så att jag bygger upp ett cupscript. Jag har 16 lag i en tabell med kolumnerna: ckID (lagets unika id), namn, cupid och gruppid. Jag vill dela upp de 16 lagen med id 1-16 i 4 grupper så 4 lag får gruppid 1; 4 får gruppid 2 etc. Med det här delas lagen upp rätt i 4 grupper eftersom den plockar ut lagen med id 1-16 efter array: <?php include('settings.php'); if(isset($_GET['randomize'])) { $alla_lag = array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); for ($i=1; $i<=4; $i++) { for ($j=1; $j<=4; $j++) { $current_team = array_pop($alla_lag); mysql_query("UPDATE $cuplag SET gruppid = '" . $i . "' WHERE ckID = '". $current_team . "'"); }}} echo 'DONE'; ?> När jag försöker plocka ut lagen automatiskt genom mysql fetch funkar det inte. Det som händer är att alla lag får gruppid 1: <?php include('settings.php'); if(isset($_GET['randomize'])) { $alla_lag=array(); $lagen2 = mysql_query("SELECT * from $cuplag WHERE cupid = 1") or die ("Det gick inte att hämta skribenten.2"); while ($lagen = mysql_fetch_array($lagen2)) { $alla_lag[] = $lagen['ckID']; for ($i=1; $i<=4; $i++) { for ($j=1; $j<=4; $j++) { $current_team = array_pop($alla_lag); mysql_query("UPDATE $cuplag SET gruppid = '" . $i . "' WHERE ckID = '". $current_team . "'"); }}}} echo 'DONE'; ?> |
||
Svara med citat |
2009-08-08, 00:51 | #2 | ||
|
|||
Supermoderator
|
Du har gjort det lite omständigt för dig även om det fungerar.
En liten fråga, heter tabellen cuplag eller har du namnet i variabeln $cuplag?
__________________
Full-stack developer, free for smaller assignments |
||
Svara med citat |
2009-08-08, 01:28 | #3 | ||
|
|||
Medlem
|
Om du inte vill ha dom i oordning kan du ta bort första for satsen.
Kod:
$lag = *array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); for($i = 1; $i <= 128; $i++){ $t = rand(0,15); $u = rand(0,15); $temp = $lag[$t]; $lag[$t] = $lag[$u]; $lag[$u] = $temp; } for($i = 0; $i < 16; $i++){ *mysql_query("UPDATE `tabell` SET gruppid='" . ceil(($i+1)/4) . "' WHERE ckID='" . $lag[$i] . "'"); } |
||
Svara med citat |
2009-08-08, 01:43 | #4 | ||
|
|||
Nykomling
|
tartareandesire: Tabellen heter cuplag.
Draqir: jag vill inte att den uppdaterar min tabell med lagen som finns arrayen, utan lagen som jag hämtar från databasen, se den nedre lösningen; $alla_lag=array(); $lagen2 = mysql_query("SELECT * from $cuplag WHERE cupid = 1") or die ("Det gick inte att hämta cuplagen"); while ($lagen = mysql_fetch_array($lagen2)) { Den. |
||
Svara med citat |
2009-08-08, 01:55 | #5 | ||
|
|||
Medlem
|
Du kör en while loop som loopar 16 ggr. Tar ut värdet på ett ckID och kör det 16 ggr. DVS varje ckID körs 16 ggr. Med andra ord det är lite svårt att förstå vad du vill göra med de 256 operationerna...
Citat:
Kod:
$lag = *array(1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16); for($i = 0; $i < 16; $i++) mysql_query("UPDATE `cuplag` SET gruppid='" . ceil(($i+1)/4) . "' WHERE ckID='" . $lag[$i] . "'"); |
||
Svara med citat |
2009-08-08, 02:00 | #6 | ||
|
|||
Nykomling
|
Hur ändrar jag arrayen så den plockar ut de lagen från tabellen cuplag med cupid 1? Så den inte loopar fram varje ckID 16 gånger.
|
||
Svara med citat |
2009-08-08, 02:08 | #7 | ||
|
|||
Medlem
|
Kod:
$i=1; while($lag = mysql_fetch_assoc($lagen2){ mysql_query("UPDATE cuplag SET gruppid='" . ceil($i/4) . "' WHERE ckID='" . $lag['ckID'] . "'"); $i++; } |
||
Svara med citat |
2009-08-09, 02:29 | #8 | ||
|
|||
Klarade millennium-buggen
|
Denna uppgift är som klippt och skuren för en enkel SQL-sats (ingen loopande behövs i PHP över huvud taget för att exekvera uppgiften):
"ckID MOD 4" betyder att man tar värdet av lagid och tar modulus 4 av det, dvs det värdet kommer då at variera mellan 0,1,2,3 och så lägger vi till 1 så varierar det mellan 1,2,3,4 i stället. Du slipper helt att skicka med parametrar från PHP. Jag förutsatte i detta att du redan har alla lagens id i tabellen cuplag och att kolumnen med lagens ID heter ckID. Kod:
UPDATE cuplag SET gruppid = *(ckID MOD 4)+1 Kod:
mysql_query("UPDATE cuplag SET gruppid = (ckID MOD 4)+1"); Kod:
UPDATE cuplag SET gruppid = *(ckID MOD 4)+1 WHERE cupid = 1 |
||
Svara med citat |
2009-08-15, 01:40 | #9 | ||
|
|||
Klarade millennium-buggen
|
Hur gick det med uppgiften, var SQL-satsen tillräckliug för att lösa uppgiften?
|
||
Svara med citat |
Svara |
|
|