[MySQL/PHP]Queries verkorten

Pagina: 1
Acties:

Onderwerpen


Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
Ik ben nu op mijn stage, en ik ben met een klasgenoot een backend aan het maken voor een lesprogramma..

nu komt er een CMS in voor leraren.. maar ik zit met een probleempje

nu kan ik over het algemeen best met databases werken etc etc etc.. nu ben ik nogal niet-zuinig met queries, maar om het allemaal eens goed doen wil ik mijn leven beteren en joins gaan gebruiken.

Nu heb wil ik per leraar de mensen weergeven die met zijn klas verbonden zijn
dit zijn dus oa :
1. Vervangende leraren
2. Stagieres/assistenten
3. Leerlingen per klaas
4. De scores van de leerlingen per klas

Als gebruikers geen wachtwoorden hebben zijn ze leerling, hebben ze de code 'ISanders=1' dan zijn het verwanten(nummer 2)

Dan heb je de verbonden leraren die dmv een koppeltabel aan een klas zitten (zodat ze op meerdere locaties lid kunnen zijn van meerdere klassen)

afijn..
Nu wil ik binnen 1 query al deze gegevens eruit halen..
is dat mogelijk??

Ik heb al een beetje lopen stoeien met de innerjoins en leftjoins.. maar ik vat er neit veel van.. ik heb de faq gelezen en de manual... En ik loop er nu een beetje op vast :O

hieronder een stukje van de database
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
Gebruikers
    Gebruiker_ID
    Gebruiker_Voornaam
    Gebruiker_Achternaam
    Gebruiker_AvatarID
    Gebruiker_IsAnders
    Gebruiker_Anders
    Rechten_ID
    Klas_ID
Scoretabel
    Score_ID
    Score_Score
    Score_Datum
    Gebruikers_ID
    Onderwerp_IDKlasleraar
    Klasleraar_ID
    Gebruiker_ID
    Klas_ID
Klasleraar
    Klasleraar_ID
    Gebruiker_ID
    Klas_ID
Klas
    Klas_ID
    Klas_Nummer
    Klas_Locatie


ik vraag hier dus geen codes :P maar ik zou weten of dit kan binnen 1 query.. en naar welke join types het handigst zijn om te gebruiken

edit:

oeps.. moet even wat in de databasecode doen..

[ Voor 3% gewijzigd door gitaarwerk op 30-01-2004 15:19 ]

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Ik zou het een stukje algemener aanpakken:
maak een tabel mensen, een tabel groepen die recursief is, dus parentid veld er in.

Dan kun je in ieders geval iedereen hierarchisch onderbrengen in een groep.

Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
djluc schreef op 30 januari 2004 @ 15:20:
Ik zou het een stukje algemener aanpakken:
maak een tabel mensen, een tabel groepen die recursief is, dus parentid veld er in.

Dan kun je in ieders geval iedereen hierarchisch onderbrengen in een groep.
Daar hebben we ook aan zitten denken.. echt puur met gebruikersgroepen.. maar dat is eventueel wel te doen.. dat is kwestie van veldje weghalen en wat andere waarden geven en een aparte tabel met groepen maken...

ik zou dan nog steeds met het probleem zitten dat ik meerdere 'soort' mensen tegelijkertijd tegelijk eruit wilt trekken.. dus lekker met 1 query ipv 3/4

dus bijvoorbeeld 10 kinderen, 2 andere leraren, en nog 1 stagiere...

[ Voor 11% gewijzigd door gitaarwerk op 30-01-2004 15:25 ]

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • bigbeng
  • Registratie: Augustus 2000
  • Laatst online: 26-11-2021
Gitaarwerk schreef op 30 januari 2004 @ 15:17:
nu kan ik over het algemeen best met databases werken etc etc etc.. nu ben ik nogal niet-zuinig met queries, maar om het allemaal eens goed doen wil ik mijn leven beteren en joins gaan gebruiken.

...

afijn..
Nu wil ik binnen 1 query al deze gegevens eruit halen..
is dat mogelijk??
Je roept het ook over jezelf af ook hoor. Wil je het nu netjes doen of gewoon op de quick and dirty manier?

Het antwoord op je vraag is ja, je kunt al die gegevens in 1 query ophalen. SQL is uitermate geschikt om gerelateerde data uit een database te halen en die zaken die jij aangeeft zijn goed te relateren. Echter voor zover ik het kan zien wil jij met 1 querie 4 soorten informatie ophalen en dat is natuurlijk weer niet echt netjes.

Maar goed het kan dus.

Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
ok :) naja.. ik weet dat ik vaak voor 2 gegevens 4 queries ging gebruiken.. dat wil ik dus voorkomen :*

haha.. Euh.. dat worden dus toch gewoon maar 4 lossen queries????
(misshcien beetje n00b vraag)

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • djluc
  • Registratie: Oktober 2002
  • Laatst online: 21-09 14:28
Gitaarwerk schreef op 30 januari 2004 @ 15:24:
[...]ik zou dan nog steeds met het probleem zitten dat ik meerdere 'soort' mensen tegelijkertijd tegelijk eruit wilt trekken.. dus lekker met 1 query ipv 3/4
dus bijvoorbeeld 10 kinderen, 2 andere leraren, en nog 1 stagiere...
Nee want mensen zijn mensen, je kunt dus gewoon wat groepen selecteren die je wilt hebben, en eventueel hun subgroepen. Ik adviseer je dus echt om voor een boomstructuur te gaan.

Acties:
  • 0 Henk 'm!

  • Bosmonster
  • Registratie: Juni 2001
  • Laatst online: 18-09 16:28

Bosmonster

*zucht*

1 query in een complexe join is ook niet per definitie sneller dan 4 losse snelle queries, zeker niet met MySQL die geoptimaliseert is voor deze laatste, snelle en eenvoudige queries.

Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
dan wordt et dus een boomstructuur met losse queries.. :)

dat was het dan .. hahaha..

iedereen bedankt! _o_ :* Wat moet ik zonder GOT B)

Ontwikkelaar van NPM library Gleamy


Acties:
  • 0 Henk 'm!

  • gitaarwerk
  • Registratie: Augustus 2001
  • Niet online

gitaarwerk

Plays piano,…

Topicstarter
*trap*

zit nog even met een klein probleem

Ik haal nu een aantal gegevens op.. alles gaat goed nu..
alleen nu zit ik met wat schoonheids probleempjes mbv het parsen hiervan

uit de arrays komen de volgende gegevens

username-score-score_onderdeel
dat resulteerd in het volgende :
Klaas - 20 - toets1
Klaas - 30 - toets2
Klaas - 25 - toets3
Piet - 12 - toets1
wat ik er nu wil van maken is :

Gebruiker - Onderdeel1 - Onderdeel2 - Onderdeel 3
Klaas - score_toets1 - score_toets2 score_toets3
Piet - score_toets1

(dit uiteraard netjes in een tabel)
alleen hoe zou ik deze array kunnen gebruiken zodat deze dit weer gaat geven??
ik kan de while loop wel een query binnenin gaan maken.. of een andere array erop los laten..

nu heb ik een idee, maar weet niet of dat nou wel zo netjes is :

Array exploderen naar meerdere arrays.. en per gebruikersnaam een eigen array..
---array1
henk - cijfer 1 - onderdeel1
henk - cijfer 2 - onderdeel2
---array2
piet - cijfer1 - onderdeel1
piet - cijfer 2 - onderdeel2

en daar de gegevens van in een while loop zetten.. en alleen de username in het 1e veld, en de rest laten parsen in een <td>-tje :)

zou dit nog snel kunnen werken?? en is het wel mogelijk (array binnen een array)

PHP:
1
2
3
4
5
6
7
8
    CASE '1': // Selecteer op klas
                $query = mysql_query("SELECT gebruikers.Gebruiker_Voornaam, gebruikers.Gebruiker_Achternaam,
klas.Klas_Nummer, score.Score_Score, les_onderwerp.Les_Onderwerp_Naam,
locaties.Locatie_Naam FROM gebruikers, klas, score, les_onderwerp, locaties
WHERE klas.Klas_ID = '$invoer' AND score.Gebruiker_ID = gebruikers.
Gebruiker_ID AND les_onderwerp.Les_Onderwerp_ID = 
score.Onderwerp_ID AND gebruikers.Klas_ID = klas.Klas_ID AND locaties.Locatie_ID = klas.Locatie_ID ORDER BY 
gebruikers.Gebruiker_$VoorAchterNaam, les_onderwerp.Les_Onderwerp_ID");


dit is de query die ik gebruik

edit:

stiekum ff oplossing proberen te vinden.. zonder arrays te exploden

PHP:
1
2
3
4
5
6
7
8
9
$locaties = QUERY::Leraren();
echo '<table><tr><td>Locatie</td><td>Klas</td><td>Leraar</td></tr>';
for ($i=0;$i < count($locaties);$i++)
{
    if ($locatie != $locaties[$i]['locatie']) { $locatie = $locaties[$i]['locatie']; $locatie_print = $locatie;}
    else {$locatie_print = '';}
    
    echo '<tr><td>'.$locatie_print.'</td><td>'.$locaties[$i]['klasnr'].'</td><td>'.$locaties[$i]['voornaam'].'</td></tr>';
}


kan dit sneller/netter nog??

[ Voor 40% gewijzigd door gitaarwerk op 02-02-2004 15:28 ]

Ontwikkelaar van NPM library Gleamy

Pagina: 1