Hulp gezocht bij maken van kruistabel in php en mysql

Status
Niet open voor verdere reacties.

dhuizinga

Gebruiker
Lid geworden
8 jul 2019
Berichten
6
Hoi beste php'ers,

ik ben nog niet heel lang bezig met php maar heb toch een wens. Gaat om het maken van een query voor 'n kruistabel te laten weergeven. Poosje geleden heb ik me hier ook al me beziggehouden maar ik kan me helaas niet in verdiepen doordat ik kennis niet op niveau heb om dit te kunnen maar ook tijd speelt een rol.

ik ben op zoek naar iemand die me hierbij wil helpen. Dit hoeft uiteraard niet kosteloos te zijn. Ga graag met iemand daarover in onderhandeling buiten het forum om.

Wat is de vraag?

ik heb in een database drie tabellen. tabel medewwerkers, tabel rollen en een tabel waarin een relatie staat tussen die twee.
wat ik nu graag zou willen is dat een dmv een SQL opdracht de waarden van tabel medewerkers verticaal wordt weergegeven en de waarden van tabel rollen horizontaal wordt weergeven. Daar waar een match tussen die twee zitten zou het mooi zijn dat via een symbool (plusje ofzo) wordt getoond op het scherm.

Ik heb geen idee hoe dit werkt vandaar dat ik de vraag hier parkeer. Hoop dat iemand me hier mee wil helpen
Kunnen we onderling de vraag fine tunen waar nodig..

Alvast bedankt,
 
Ik ben nieuwsgierig of je al iets aan code hebt, en heb je ook een voorbeeld van je databaseopzet met je velden?
 
Laatst bewerkt:
Je kan eens beginnen met in je database die kruistabel te maken. Als dat Access o.i.d. is, dan kun je simpel de SQL daarvan uitlezen, en dan heb je het belangrijkse (de SQL code) al te pakken. Die kan je dan wel verder in je script ombouwen denk ik.
 
Ik heb je bericht gelezen, maar is er een reden dat je juist horizontaal wilt werken in plaats van verticaal? Ik heb zelf in een ver verleden ook een rechtensysteem gebouwd, en met tiental groepen wordt het juist onwerkbaar omdat je blijft scrollen.

Als je verticaal werkt lijkt het mij juist overzichtelijker. En het is makkelijk qua opbouw. ;)
Maar anders kan ik wel een opzetje maken hoe je dit verticaal kan uitbreiden. Laat dan even je datastructuur weten met een dumpje uit phpMyAdmin of wat je dan ook gebruikt en hoe je relaties liggen.

Ik heb het even uitgedacht:

- Haal eerst alle rollen op met een query.
- Haal de medewerkers en de behorende rollen op met een query
- De resultaten van deze laatste query kan je dan voor het gemak in een array bewaren zodat je daarna makkelijk het overzicht in een HTML-table kunt bouwen.
- Dan heb je een dubbele for-loop nodig om alle kolommen en rijen aan te maken:
= Allereerst loop je alle medewerkers af in buitenste for-loop, en daarna doorloop je alle rollen. Hiermee breid je dan je tabel uit.
= Bij elke rol controleer je of deze gebruiker die heeft. In dat geval zet je bijvoorbeeld Ja neer, of anders een Nee.

Dus je krijgt zoiets:
PHP:
<table>
    <thead>
        <tr>
        <th>-</th><?php
        foreach ($rollen as $rol) {
            ?><th><?php echo $rol; ?></th><?php
        }
        ?></tr>
    </thead>
    <tbody><?php
        foreach ($medewerkers as $medewerker) {
            ?><tr>
                <td><?php echo $medewerker['naam']; ?></td>
                 <?php
                foreach ($rollen as $rolID) {
                    ?><td><?php
                    if (isset($medewerker['rol'][$rolID])) {
                        echo 'Ja';
                    } else {
                        echo 'Nee';
                    }
                    ?></td>
            <?php
                }
            ?></tr><?php
        }
    ?></tbody>
</table>

Even uit mijn blote koppie :)
Doe er je voordeel mee, en ik hoop dat je er uit komt!

Zelf is het makkelijk als je eerst een mockup van je tabel maakt, waaruit je de tabel uiteindelijk dynamisch kan maken.
Op die manier moet het niet lastig zijn om dit te bouwen. Maar verticaal wat mijn voorkeur geeft maakt het wel minder complexer.
 
Laatst bewerkt:
Ik ben nieuwsgierig of je al iets aan code hebt, en heb je ook een voorbeeld van je databaseopzet met je velden?

Ik hen nog nul komma nul aan codering... dit is voor mijn sql en php niveau te hoog gegrepen :)
 
Maar wel een database-structuur, dus laat die eens even zien.
Ik hen nog nul komma nul aan codering... dit is voor mijn sql en php niveau te hoog gegrepen :)

En daarom heb ik een mooie opzet geschreven zodat het zeker moet lukken.
 
Laatst bewerkt:
Ik heb je bericht gelezen, maar is er een reden dat je juist horizontaal wilt werken in plaats van verticaal? Ik heb zelf in een ver verleden ook een rechtensysteem gebouwd, en met tiental groepen wordt het juist onwerkbaar omdat je blijft scrollen.

Als je verticaal werkt lijkt het mij juist overzichtelijker. En het is makkelijk qua opbouw. ;)
Maar anders kan ik wel een opzetje maken hoe je dit verticaal kan uitbreiden. Laat dan even je datastructuur weten met een dumpje uit phpMyAdmin of wat je dan ook gebruikt en hoe je relaties liggen.

Ik heb het even uitgedacht:

- Haal eerst alle rollen op met een query.
- Haal de medewerkers en de behorende rollen op met een query
- De resultaten van deze laatste query kan je dan voor het gemak in een array bewaren zodat je daarna makkelijk het overzicht in een HTML-table kunt bouwen.
- Dan heb je een dubbele for-loop nodig om alle kolommen en rijen aan te maken:
= Allereerst loop je alle medewerkers af in buitenste for-loop, en daarna doorloop je alle rollen. Hiermee breid je dan je tabel uit.
= Bij elke rol controleer je of deze gebruiker die heeft. In dat geval zet je bijvoorbeeld Ja neer, of anders een Nee.

Dus je krijgt zoiets:
PHP:
<table>
    <thead>
        <tr>
        <th>-</th><?php
        foreach ($rollen as $rol) {
            ?><th><?php echo $rol; ?></th><?php
        }
        ?></tr>
    </thead>
    <tbody><?php
        foreach ($medewerkers as $medewerker) {
            ?><tr>
                <td><?php echo $medewerker['naam']; ?></td>
                 <?php
                foreach ($rollen as $rolID) {
                    ?><td><?php
                    if (isset($medewerker['rol'][$rolID])) {
                        echo 'Ja';
                    } else {
                        echo 'Nee';
                    }
                    ?></td>
            <?php
                }
            ?></tr><?php
        }
    ?></tbody>
</table>

Even uit mijn blote koppie :)
Doe er je voordeel mee, en ik hoop dat je er uit komt!

Zelf is het makkelijk als je eerst een mockup van je tabel maakt, waaruit je de tabel uiteindelijk dynamisch kan maken.
Op die manier moet het niet lastig zijn om dit te bouwen. Maar verticaal wat mijn voorkeur geeft maakt het wel minder complexer.



De reden is dat ik een overzicht heb van medewerkers van een bepaalde afdeling en die in bezit zijn van welke rollen. Dit is eenvoudig gezegd maar moeilijker in elkaar te zetten. Ik bedoel dan niet van 1mdw welke rollen.. maar meerdere medwerkers met welke rolllen.

Ik kan evt wel tabellen tonen maar vanwege de integriteit van het bedrijf lijkt me dit erg wenselijk. Ik geef toe dat het neit handig is.. maar het komt er op neer dat ik 3 tabellen heb.

Naam database = bp

1 person ... daarin de gevens van de personen
(id) veld = MSKEYVALUE_MEDEWERKER

2 role ... daarin staan ALLE rollen
(id) veld = MSKEYVALUE_ROL

3 person2role .... daarin staan alle koppelingen tussen de person en role en is een koppeltabel.
velden ..... MSKEYVALUE_MEDEWERKER & MSKEYVALUE_ROL


een persoon kan dus meerder rollen hebben.
zou het ong als hieronder willen laten displayen.

mdw1 mdw2 mdw3
rol1 +
rol2 + +
rol3 + +
 
Met mijn opzet moet je wel een eind komen. :)
 
Werk gewoon step-by-step alles af, en je komt er wel stapsgewijs. Zo ben ik overigens als beginner ook begonnen aan een dergelijk systeem.
Een databaseschema (gebruik navicat of Access) maakt het ook altijd erg overzichtelijk.
 
Laatst bewerkt:
Ben je er nog uitgekomen?

Ik zag net dat je het ook op andere forums gevraagd had. Dan is het wel zo fijn om ook naar die topics hier te linken zodat we ook kunnen kijken naar de andere gegeven oplossingen. Het gebeurt regelmatig dat op forum A en B een topic gestart wordt, en op forum A wordt opgelost terwijl deze op forum B minder aanloop heeft, maar pas op B een oplossing krijgt terwijl die op A allang is opgelost. Zonde van de moeite voor de helper op forum B.
 
hoi php4u

nee ik ben hier nog niet uit gekomen. Moet ook toegeven dat ik er nog niet mee bezig ben geweest.. druk met de laatste zaken op het werk voor mijn vakantie aan het regelen en de voorbereiding van de vakantie..

klopt ik heb het ook op een ander forum de vraag gesteld maar daar kunnen stellen ze lastige vragen en ik zou dat niet in de juiste categorie geplaatst hebben en voor je het weet zit je in een discussie die er helemaal niet toe doe en kom je steeds verder van je oorspronkelijke vraag af..

maar de vraag staat nog steeds hoor... maar het tijdgebrek ook :).. dus gaat niet zo hard.

tnx voor je response
 
hoi php4u

nee ik ben hier nog niet uit gekomen. Moet ook toegeven dat ik er nog niet mee bezig ben geweest.. druk met de laatste zaken op het werk voor mijn vakantie aan het regelen en de voorbereiding van de vakantie..

klopt ik heb het ook op een ander forum de vraag gesteld maar daar kunnen stellen ze lastige vragen en ik zou dat niet in de juiste categorie geplaatst hebben en voor je het weet zit je in een discussie die er helemaal niet toe doe en kom je steeds verder van je oorspronkelijke vraag af..

maar de vraag staat nog steeds hoor... maar het tijdgebrek ook :).. dus gaat niet zo hard.

tnx voor je response

Ooit komt er zeker wel tijd hoor, maar eerst vakantie :) :)

Als ik zo zie dan is daar toch een duidelijke oplossing gegeven. Plus mijn idee hierboven om minder hooi op je vork te nemen, en stukje bij beetje te werken. Als je basic bent in PHP kan ik mij indenken dat het best complex kan zijn en dan ik mij kan indenken dat je het beter wilt laten doen door iemand (ik snap die verwijzing naar die vacatureplek daar wel), of je moet een hoop maanden wat meer ervaring opdoen, of echt zin hebben om uren te klooien wat een hoop stress oplevert en misschien wel gevaarlijke resultaten.

Ik denk dat je na je vakantie toch even een beslissing moet gaan nemen :).
 
Laatst bewerkt:
Helaas dit is voor mij te hoog gegrepen. Beide topic... hier als op phphulp.nl maar kom d'r niet uit... Men reageert als ze met iemand te maken heeft dat die hoger wiskunde heeft gestudeerd maar wat ze zeggen is nog al abracadabra. Maar ook met bovenstaand snap ik niet.
Als je aan Ome Google vraag dan is keuze reuze maar ook ooooh zo onbegrijpelijk... kom dr maar niet achter hoe je nu zo'n kruistabel te realiseren. ... Pittig onderdeel dit.
 
Je kan het ook door iemand laten doen, als het te complex is? Zo te zien hebben ze bij de buren daar een mogelijkheid voor. Met wat mazzel kan je het in een paar dagen werkend hebben.

Ikzelf heb een tijdje geleden ook een kruistabel gemaakt om rechten in te stellen voor een systeem voor een klant. Het was een flink karwei maar stapsgewijs kwam ik er wel.

Tomas zijn code (zie link in vorige post) komt erg dicht in de buurt wat je eigenlijk zoekt. Gewoon stapje voor stapje werken, kijken wat er gebeurt. En als het naar believen werkt, pak je het volgende stapje. En als dat goed gaat, dan ga je naar de volgende stap. En uiteindelijk heb je een werkend systeem.

Belangrijkste ding om te onthouden: Neem nooit teveel hooi op je vork.

Ik vind het niet echt onder hoge wiskunde vallen, maar meer 'logisch' nadenken. De berekeningen die plaatsvinden zijn van basisschool niveau. Het begin lijkt moeilijk, maar ik durf te wedden dat als je halverwege bent dat je begrijpt wat er gaat gebeuren.
 
Laatst bewerkt:
Wat was hier nu de oplossing bij?
De opzet van PHP4U lijkt me alleszins een uitstekende oplossing
Ben nieuwsgierig
 
Status
Niet open voor verdere reacties.
Steun Ons

Nieuwste berichten

Terug
Bovenaan Onderaan