SQL statement

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

BlcKJcK

BlcKJcK

17/01/2007 09:05:00
Quote Anchor link
[Edit: even een img van gemaakt]
Beste PHPhulp,

ik heb nu een datamodel(Afbeelding)

Dit is de tabel waar het om gaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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.
Gewijzigd op 01/01/1970 01:00:00 door BlcKJcK
 
PHP hulp

PHP hulp

04/12/2024 09:53:56
 
BlcKJcK

BlcKJcK

17/01/2007 09:06:00
Quote Anchor link
Oeps...verkeerde forum..excuses: Kan deze verplaatst worden naar Databases & SQL ? :)
Gewijzigd op 01/01/1970 01:00:00 door BlcKJcK
 
Bart van der veen

bart van der veen

17/01/2007 09:40:00
Quote Anchor link
wat nou verkeerde forum, mogen we dan helemaal geen antwoord meer geven?

we weten het namelijk wel!! ;-)
 
BlcKJcK

BlcKJcK

17/01/2007 09:42:00
Quote Anchor link
bart van der veen schreef op 17.01.2007 09:40:
wat nou verkeerde forum, mogen we dan helemaal geen antwoord meer geven?

we weten het namelijk wel!! ;-)


Ik bedoelde meer zoiets als: Koffiehoek ipv Database/SQL
 
Bart van der veen

bart van der veen

17/01/2007 09:53:00
Quote Anchor link
oh in dat geval:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<?
SELECT
    [ALL | DISTINCT | DISTINCTROW ] // distinct of distinctrow moet je ff proberenen
      [HIGH_PRIORITY]
      [
STRAIGHT_JOIN]
      [
SQL_SMALL_RESULT] [SQL_BIG_RESULT] [SQL_BUFFER_RESULT]
      [
SQL_CACHE | SQL_NO_CACHE] [SQL_CALC_FOUND_ROWS]
    select_expr, ...
    [
FROM table_references
    [WHERE where_condition]
    [
GROUP BY {col_name | expr | position}
      [
ASC | DESC], ... [WITH ROLLUP]]
    [
HAVING where_condition]
    [
ORDER BY {col_name | expr | position}
      [
ASC | DESC], ...]
    [
LIMIT {[offset,] row_count | row_count OFFSET offset}]
    [
PROCEDURE procedure_name(argument_list)]
    [
INTO OUTFILE 'file_name' export_options
      | INTO DUMPFILE 'file_name'
      | INTO @var_name [, @var_name]]
    [
FOR UPDATE | LOCK IN SHARE MODE]]
?>
 
BlcKJcK

BlcKJcK

17/01/2007 09:58:00
Quote Anchor link
Bedankt, maar hier kan ik niet echt goed mee overweg, er staan dingen in die ik niet nodig heb.

Is er een beperkter oplossing mogelijk? :)
 
Klaasjan Boven

Klaasjan Boven

17/01/2007 10:34:00
Quote Anchor link
SELECT
DISCTINT(avondid)
FROM
tabel
 
BlcKJcK

BlcKJcK

17/01/2007 21:20:00
Quote Anchor link
Uitgaande van het resultaat van tabel uit eerste reactie

Alle dagen moeten uniek gepakt worden dus:

1
2
3
4
5
6

én iedere medewerker moet minstens aan één van deze unieke dagen zijn gekoppeld, bijv:

[html]
[pre]
dagid medid
1 3
2 2
3 5
4 1
5 4
6 4
[/pre]
[/html]


Met distinct kan ik nu enkel de dagen uniek pakken, maar hoe deze weer te combineren met de medewerkers die minstens 1 keer moeten voorkomen.
Gewijzigd op 01/01/1970 01:00:00 door BlcKJcK
 
Klaasjan Boven

Klaasjan Boven

17/01/2007 21:30:00
Quote Anchor link
Ik zou zo geen juist SQL statement kunnen bedenken voor wat jij wil.

Ik snap btw ook niet waarom je dagid uniek wil. Er zijn namelijk meerdere
medids per dagid.

als je van het uniek afstapt zal het iets worden als:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?php
$sql
="
SELECT
    a.dagid,
    b.dagnaam,
    b.dagtijdstip,
    c.medid,
    c.mednaam
FROM
    koppeltabel a
    dagen b,
    medewerker c
WHERE
     a.dagid=b.dagid    
AND
     a.medid=c.medid
"
;
?>


Klaasjan
 
BlcKJcK

BlcKJcK

17/01/2007 21:32:00
Quote Anchor link
1 medewerker kan maar op 1 dag werken, maar meerdere mensen geven zich voor deze zelfde dag op. Ik moet dus een eerlijk systeem maken dat van alle opgegeven mensen er minsten 1 word geselecteerd voor 1 dag.
 
Klaasjan Boven

Klaasjan Boven

17/01/2007 21:43:00
Quote Anchor link
RAND()
 
BlcKJcK

BlcKJcK

17/01/2007 21:44:00
Quote Anchor link
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.....
 
Robert Deiman

Robert Deiman

17/01/2007 22:49:00
Quote Anchor link
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.
 
Klaasjan Boven

Klaasjan Boven

18/01/2007 07:48:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
<?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:
Jammer van de tabknop
Gewijzigd op 01/01/1970 01:00:00 door Klaasjan Boven
 
BlcKJcK

BlcKJcK

18/01/2007 09:43:00
Quote Anchor link
Beste Klaasjan_Boven,

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

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
<?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
Gewijzigd op 01/01/1970 01:00:00 door BlcKJcK
 
Jurgen assaasas

Jurgen assaasas

18/01/2007 09:55:00
Quote Anchor link
schrijf ze weg in de DB, staan ze er al in(vor die week) selecteer een ander etc.
 
Robert Deiman

Robert Deiman

18/01/2007 10:24:00
Quote Anchor link
Goed, ik zal mijn gedachte nog eens uitwerken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
<?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
 
Frank -

Frank -

18/01/2007 10:52:00
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
<?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?
 
BlcKJcK

BlcKJcK

18/01/2007 13:31:00
Quote Anchor link
Robert bedankt! Ook alle anderen...

hij doet bijna wat ik wil.

Alleen dit werkt niet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php

   $sql
="

    SELECT DISTINCT(medid), avondid
    FROM
         avondrooster"
;

?>


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

BlcKJcK

18/01/2007 14:03:00
Quote Anchor link
de oplossing:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?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!
Gewijzigd op 01/01/1970 01:00:00 door BlcKJcK
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.