Avatar billede straszek Praktikant
26. november 2005 - 13:24 Der er 25 kommentarer og
1 løsning

tildele opgaver

Jeg ved at lave et system der kan tildele opgaver til personer, og har i den forbindelse et problem jeg ikke lige kan finde ud af at løse.

jeg kan godt finde ud af at tildele 6 opgaver til tre personer ved en simpel sividering af antal opgaver med antal personer.

Men hvordan skal jeg gøre det når antallet af opgaver ikke går op med antallet af person, så hvis der f.x. er 7 opgaver til 3 personer så skal 2 personer have 2 opgaver og en person 3 opgaver?


Søren
Avatar billede Slettet bruger
26. november 2005 - 13:41 #1
Du skal jo have en eller anden regel for hvorledes du tildeler opgaver. Hvis det er ligegyldigt hvor, altså det er bare hænder, så kunne du jo tildele efter den der har fået tildelt færrest får den nye, og hvor der er flere der er fået tildelt lige lidt så tager du bare den første.
Avatar billede nielle Nybegynder
26. november 2005 - 13:44 #2
F.eks. sådan:

$person = ("person1", "person2", "person3");
$opgave = ("opgave1", "opgave2", "opgave3", "opgave4", "opgave5", "opgave6", "opgave7");

$personNo = 0;
for ($opgaveNo=0; $opgaveNo<count($opgave); opgaveNo++)
{
    echo "Person: " . $person[$personNo] . " får opgave: " . $opgave[$opgaveNo] . "<br>";

    $personNo++;
    if ($personNo == count($person))
        $personNo = 0;
}
Avatar billede straszek Praktikant
26. november 2005 - 15:05 #3
nielle> Jeg får error i først linje
Avatar billede nizo Nybegynder
26. november 2005 - 15:10 #4
det er fordi nielle har glemt at lave det til arrays..

$person = array("person1", "person2", "person3");
$opgave = array("opgave1", "opgave2", "opgave3", "opgave4", "opgave5", "opgave6", "opgave7");

$personNo = 0;
for ($opgaveNo=0; $opgaveNo<count($opgave); opgaveNo++)
{
    echo "Person: " . $person[$personNo] . " får opgave: " . $opgave[$opgaveNo] . "<br>";

    $personNo++;
    if ($personNo == count($person))
        $personNo = 0;
}
Avatar billede straszek Praktikant
26. november 2005 - 17:21 #5
Nu er fejlen her:
for ($opgaveNo=0; $opgaveNo<count($opgave); opgaveNo++)
Avatar billede nielle Nybegynder
26. november 2005 - 18:05 #6
Hvad siger fejlbeskeden?
Avatar billede nielle Nybegynder
26. november 2005 - 18:06 #7
Nåe, ret til

for ($opgaveNo=0; $opgaveNo<count($opgave); $opgaveNo++)
Avatar billede straszek Praktikant
26. november 2005 - 18:15 #8
Det var bedre

HVordan skal jeg gøre hvis de 2 arrays skal erstattes af et db udtræk?
Avatar billede nielle Nybegynder
26. november 2005 - 18:24 #9
Nogenlunde sådan her:

$person = array();

$sqlPerson = "SELECT person FROM personTabel";
$queryPerson = mysql_query($sqlPerson) or die(mysql_error());
while ($row = mysql_fetch_assoc($queryPerson))
{
    $person[] = $row["person"];
}

$opgave = array();

$sqlOpgave = "SELECT opgave FROM opgaveTabel";
$queryOpgave = mysql_query($sqlOpgave) or die(mysql_error());
while ($row = mysql_fetch_assoc($queryOpgave))
{
    $opgave[] = $row["opgave"];
}

$personNo = 0;
for ($opgaveNo=0; $opgaveNo<count($opgave); $opgaveNo++)
{
    echo "Person: " . $person[$personNo] . " får opgave: " . $opgave[$opgaveNo] . "<br>";

    $personNo++;
    if ($personNo == count($person))
        $personNo = 0;
}
Avatar billede nizo Nybegynder
26. november 2005 - 18:34 #10
øh nielle, hvorfor gør du saadan? Naar du hiver noget ud af db'en ER det et array.
gør dog saadan her:

$person = mysql_fetch_assoc(mysql_query("SELECT person FROM table"));
$opgave = array("opgave1", "opgave2", "opgave3", "opgave4", "opgave5", "opgave6", "opgave7");

$personNo = 0;
for ($opgaveNo=0; $opgaveNo<count($opgave); $opgaveNo++)
{
    echo "Person: " . $person[$personNo] . " får opgave: " . $opgave[$opgaveNo] . "<br>";

    $personNo++;
    if ($personNo == count($person))
        $personNo = 0;
}

meget mere enkelt?
Avatar billede straszek Praktikant
26. november 2005 - 18:41 #11
Nielle > Det nræmer sig men der er stadig et par problemer

Der vises flere opgaver end der er - koden viser 2168 "opgaver"  -der er kun 2153
Person nummer vises ikke

Min kode som den se ud nu:

$sqlPerson = "select bruger_id from rundringning_udvalg_users where rund_id='".$_GET['rundid']."'";
$queryPerson = mysql_query($sqlPerson) or die(mysql_error());
while ($row = mysql_fetch_assoc($queryPerson))
{
    $person[] = $row["bruger_id"];
}

$opgave = array();

$sqlOpgave = "select skole_id FROM rundringer_udvalg where tildelt='0' AND rundringning='".$_GET['rundid']."'";
$queryOpgave = mysql_query($sqlOpgave) or die(mysql_error());
while ($row = mysql_fetch_assoc($queryOpgave))
{
    $opgave[] = $row["skole_id"];
}

$personNo = 0;
for ($opgaveNo=0; $opgaveNo<count($opgave); $opgaveNo++)
{
    echo "Person: " . $person[$personNo] . " får opgave: " . $opgave[$opgaveNo] . "<br>";

    $personNo++;
    if ($personNo == count($person))
        $personNo = 0;
}
Avatar billede nielle Nybegynder
26. november 2005 - 18:42 #12
nizo> Med denne:

$person = mysql_fetch_assoc(mysql_query("SELECT person FROM table"));

- får du godt nok et array, men det er altså et array over samtlige felter i første række. Brugen af while-løkken er for at komme igennem samtlige rækker.
Avatar billede straszek Praktikant
26. november 2005 - 18:51 #13
Problemet med person nummer var min fejl. Men der vises stadig for mange opgaver
Avatar billede nielle Nybegynder
26. november 2005 - 18:52 #14
Dine 2 SQL-udtryk hiver vel det ud som de skal. Hvis ikke, så har du skrevet noget galt i dem. Jeg har desværre ikke mange chancer for at gætte hvad det kan være. :^|

En fejlmulighed er hvis der er flere personer end opgaver. Er der det?
Avatar billede nielle Nybegynder
26. november 2005 - 18:53 #15
Glem den sidste kommentar - det vil ikke give en fejl. :^)
Avatar billede straszek Praktikant
26. november 2005 - 19:03 #16
Jeg har nu trippel tjekket og der bliver altså vist flere opgaver end der findes i databasen
Avatar billede straszek Praktikant
26. november 2005 - 19:06 #17
og laver jeg en $data = mysql_num_rows... på sql'en så viser den det rigtige antal opgaver hvor imod scriptet viser 15 opgaver for meget
Avatar billede nielle Nybegynder
26. november 2005 - 19:10 #18
Prøv at udskrive værdien af:

count($opgave[])
Avatar billede straszek Praktikant
26. november 2005 - 19:13 #19
Hvor & hvordan skal jeg gøre det?
Avatar billede nielle Nybegynder
26. november 2005 - 19:16 #20
$opgave = array();

$sqlOpgave = "select skole_id FROM rundringer_udvalg where tildelt='0' AND rundringning='".$_GET['rundid']."'";
$queryOpgave = mysql_query($sqlOpgave) or die(mysql_error());
while ($row = mysql_fetch_assoc($queryOpgave))
{
    $opgave[] = $row["skole_id"];
}

echo count($opgave[]) . "<br>";  // <- Her
Avatar billede straszek Praktikant
26. november 2005 - 19:19 #21
det give Fatal error: Cannot use [] for reading in ...
Avatar billede nielle Nybegynder
26. november 2005 - 19:20 #22
echo count($opgave) . "<br>";
Avatar billede straszek Praktikant
26. november 2005 - 19:24 #23
echo count($opgave) . "<br>"; giver det rigtige antal opgaver nemlig 2155 men scriptet fortsætter til 2168
Avatar billede nielle Nybegynder
26. november 2005 - 19:33 #24
Hvordan kan du se at den øjenslynlig skriver 15 poster mere ud? Det er meget at tælle til 2168.
Avatar billede straszek Praktikant
26. november 2005 - 20:06 #25
Beklager  - jeg havde se mig blind på at opgave nummeret skulle være fortløbende, men det afspejler jo opgavens nummer og det er ikke nødvendig fortløbende.

Mange, mange tak for hælpen. Læg et svar og du skal få point.

Søren
Avatar billede nielle Nybegynder
26. november 2005 - 20:29 #26
Nåeee, der kan vel være huller i den nummerorden. Min egen mistanke gok dog på at der måske var nogen af opgaverne som strakte sig over mere end en line.

Men du kan jo prøve med denne lille variation:

$personNo = 0;
for ($opgaveNo=0; $opgaveNo<count($opgave); $opgaveNo++)
{
    echo $opgaveNo ."&gt;&gt; Person: " . $person[$personNo] . " får opgave: " . $opgave[$opgaveNo] . "<br>";

    $personNo++;
    if ($personNo == count($person))
        $personNo = 0;
}

... og et svar :^)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester