WN

WN (https://www.wn.se/forum/index.php)
-   Serversidans teknologier (https://www.wn.se/forum/forumdisplay.php?f=4)
-   -   Alla lag får samma gruppid vid indelning (https://www.wn.se/forum/showthread.php?t=38352)

ksud 2009-08-07 22:58

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';
?>

tartareandesire 2009-08-07 23:51

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?

Draqir 2009-08-08 00:28

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] . "'");
}


ksud 2009-08-08 00:43

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.

Draqir 2009-08-08 00:55

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:

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.
Detta löses som sagt enbart genom;

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] . "'");


ksud 2009-08-08 01:00

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.

Draqir 2009-08-08 01:08

Kod:

$i=1;
while($lag = mysql_fetch_assoc($lagen2){
  mysql_query("UPDATE cuplag SET gruppid='" . ceil($i/4) . "' WHERE ckID='" . $lag['ckID'] . "'");
  $i++;
}

Är nog det du letar efter. Men som sagt... :P

Conny Westh 2009-08-09 01:29

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");
Om du har flera cuper i samma tabell så får du lägga till en WHERE klausul med cupens ID givetvis.


Kod:

UPDATE cuplag SET gruppid = *(ckID MOD 4)+1 WHERE cupid = 1

Conny Westh 2009-08-15 00:40

Hur gick det med uppgiften, var SQL-satsen tillräckliug för att lösa uppgiften?


Alla tider är GMT +2. Klockan är nu 03:50.

Programvara från: vBulletin® Version 3.8.2
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Svensk översättning av: Anders Pettersson