[Edit: even een img van gemaakt]
Beste PHPhulp,

ik heb nu een datamodel()

Dit is de tabel waar het om gaat:
<?php
echo '<pre>
|avondid | medid | week | jaar |
1 1 3 2007
1 2 3 2007
1 3 3 2007
2 1 3 2007
2 2 3 2007
2 3 3 2007
3 1 3 2007
3 2 3 2007
3 3 3 2007
3 4 3 2007
3 5 3 2007
4 2 3 2007
5 1 3 2007
5 4 3 2007
6 1 3 2007
6 2 3 2007
6 3 3 2007
6 4 3 2007
6 5 3 2007
</pre>';
?>

De avondid en de medid wil ik aanelkaar koppelen, ik wil dus een SELECT die elke avondid uniek pakt

1
2
3
4
5
6

En koppelt aan een medid, maar iedere medid moet er minstens 1 keer in voorkomen.

Wie kan me enigzins op weg helpen.
Het kan overigens ook in PHP opgelost kunnen worden dan krijg je dit effect:

ik pak alle medewerkers uit avondid 1, hier kies ik 1 random medewerker en zet deze in een array,

vervolgens maak ik een 2e query en selecteer alle medewerkers van avond id 2. ik kies weer 1 random medewerker uit, kijk of deze al in de array staat (in_array), zoja pak de volgende, zoniet zet deze weer in de array

etc.....
Waarom niet zo:

zet alle medewerkers in een array, shuffle die array en vul dan elke medewerker een keer in, mits die voorkomt in de array. En haal als je een medewerker invult, die id dan uit de database.
<?php
$sql="
SELECT
RAND(c.medid),
a.dagid,
b.dagnaam,
b.dagtijdstip,
c.mednaam
FROM
koppeltabel a
dagen b,
medewerker c
WHERE
a.dagid=b.dagid
AND
a.medid=c.medid
";
?>

Niet getest maar zoiets moet mogelijk zijn

[edit]Komma vergeten[/edit]
[edit]Jammer van de tabknop[/edit]
Beste Klaasjan_Boven,

ziet er goed uit, zou deze willen gebruiken aleen krijg nu een foutmelding: "Incorrect arguments to RAND"

<?php
$sql="
SELECT RAND(c.medid), a.dagid, b.dagnaam, b.dagtijdstip, c.mednaam
FROM
avondrooster AS a, avond AS b, medewerker AS c
WHERE
a.avondid=b.avondid
AND
a.medid=c.medid
";
?>

en nog ff terzijde, het random systeem zou alsnog niet een eerlijk systeem zijn, stel dat er random 3 keer dezelfde medewerker wordt ingeroosterd en 2 andere daardoor helemaal niet, aangezien het maar om 6 avonden gaat(dus niet echt dé oplossing), maargoed
schrijf ze weg in de DB, staan ze er al in(vor die week) selecteer een ander etc.
Goed, ik zal mijn gedachte nog eens uitwerken:

<?php
   // zet alle werknemers in een array
   $sql="
    SELECT
         medid
    FROM
         medewerker";
   $result=mysql_query($sql) or trigger_error(mysql_error);
   while($row=mysql_fetch_assoc($result)){
       $med_array[] = $row['medid'];
       }
// $med_array bevat nu alle werknemers die je in kan zetten, dus die gaan we door elkaar husselen
   shuffle($med_array);
   //geef een teller mee om de goede dag te updaten
   $dag_teller=1;
   foreach($med_array as $key => $value){
        //zo pakt die elke voorkomende medewerker in ieder geval 1 keer
        // UPDATE de tabel met $value in de kolom medid
        }
    for($teller=$dag_teller;$teller<= 6; $teller++){
         //hussel werknemers opnieuw pak de 1e waarde en geef die in
        }
         
?>


Hopelijk snap je zo wat ik bedoelde
<?php
$sql="
SELECT
c.medid,
a.dagid,
b.dagnaam,
b.dagtijdstip,
c.mednaam
FROM
koppeltabel a
dagen b,
medewerker c
WHERE
a.dagid=b.dagid
AND
a.medid=c.medid
ORDER BY RAND()
";
?>
Zet de RAND() eens in ORDER BY. Kun je daar mee uit de voeten?
Robert bedankt! Ook alle anderen...

hij doet bijna wat ik wil.

Alleen dit werkt niet:

<?php

$sql="

SELECT DISTINCT(medid), avondid
FROM
avondrooster";

?>

Hij pakt de medid niet uniek, maar laat alle medid's zien
de oplossing:

<?php

$sql="
SELECT DISTINCT (medid), avondid
FROM
avondrooster
LIMIT 0,6
";
?>

Bij het selecteren van meerdere kollomen, en er wordt gebruik gemaakt van distinct op 1 van deze kollomen, dan moet LIMIT er bij staan.

iedereen bedankt!

Reageren