Toon posts:

[PHP/MySQL] data verdelen over grid

Pagina: 1
Acties:

Onderwerpen


  • sjunnie
  • Registratie: september 2001
  • Laatst online: 00:56

sjunnie

U mag ook Sjun zeggen

Topicstarter
Ik moet een tabel vullen met gegevens uit een database, maar deze gegevens moeten in een specifieke cel op de pagina geplaatst worden.
Ik heb getracht dit met een html-tabelletje abstract enigszins te illustreren:
HA
GAGBGCGDGE
item aitem aitem aitem aitem a
item bitem bitem bitem bitem b
item citem citem citem citem c
item ditem ditem d
item eitem e

HB
GAGBGCGDGE
item aitem aitem aitem aitem a
item bitem bitem bitem bitem b
item citem citem citem citem c
item ditem ditem d
item eitem e

HC
GAGBGCGDGE
item aitem aitem aitem aitem a
item bitem bitem bitem bitem b
item citem citem citem citem c
item ditem ditem d
item eitem e


De hiërarchie is dat er een x-aantal hoofdcategorieën (HA, HB en HC, etc...) zijn, welke allen een aantal subgroepen (GA, GB, GC, etc..) hebben. Deze subgroepen hebben op hun beurt allemaal een variërend aantal items.

Ik heb nu alle items in de database geplaatst, in een tabel met twee kolommen;
codeomschrijving
AAAitem 1
AABitem 2
AACitem 3
AADetc...

nb: de voorbeelddata is hoe dan ook een string, als hierboven 'item 1' staat, kan dat net zo goed 'item a' zijn, alsook 'foo' of 'bar'
Ik heb ervoor gekozen om de kolom `code` te vullen met de cel-lokatie als: AAA <= waarbij de 1e A staat voor de hoofdcategorie waaronder dit item valt, de 2e voor de groep, en de laatste letter is het zoveelste item in die groep. (ie: de string zelf)

Nu wil ik de gegevens liefst ineens uit de database halen, in arrays zetten, en daar doorheen lopen om de gegevens naar het scherm te sturen.
Hierin zit dus ook mijn probleem; hoe krijg ik die data uit de database in multidimensionale arrays?
Feitelijk wil ik dus de kolom code vertalen naar de arraysleutels: de waarde behorend bij code BEA zou dus in $data[B][E][A] geplaatst moeten worden, of wellicht handiger: $data[2][5][1]

Mogelijk zou het ook anders/beter kunnen, alle suggesties zijn welkom.
Ik zou bijvoorbeeld eerst de exacte layout kunnen bepalen, en aan de hand daarvan per groep een query op de database te doen, maar dat lijkt me alles behalve efficiënt.

If you can judge a wise man by the color of his skin then mister you're a better man than I


  • ajakkes
  • Registratie: maart 2004
  • Laatst online: 05-09 11:21
Ze zijn gesorteerd op code?
Dus ABC komt altijd voor BAC?

Als codebegin > oudecodebegin begin tabel
Als codetweede > oudecodetweede begin rij
Als codederde > oudecodederde begin cel
oudecodebegin = codebegin

Dat moet toch gewoon werken?

Simplistisch omschreven natuurlijk, de code zelf kan je zelf wel schrijven neem ik aan.

👑


  • sjunnie
  • Registratie: september 2001
  • Laatst online: 00:56

sjunnie

U mag ook Sjun zeggen

Topicstarter
Toegegeven, dat zal best werken.
Maar om nou voor ieder van de kleine 1000 items de volgende code
PHP:
1
2
3
4
5
6
7
8
9
if(mb_substr($row['code'], 1, 1)>$currentTableNum) {
beginTable();
}
if(mb_substr($row['code'], 3, 1)>$currentTableRow){
beginTableRow();
}
if(mb_substr($row['code'], 2, 1)>$currentTableCell){
beginTableCell();
}

met bijbehorende functies uit te voeren lijkt me ook verre van efficiënt.

Daarnaast zijn er rijen die wel moeten bestaan, maar waarvan de eerste cel geen waarde heeft, dan kan ik er ook geen vergelijking op los laten en begint de nieuwe rij dus pas als er een nieuwe waarde is. Anders gezegd: ik krijg achteraan teveel kolommen en alle data schuift in de tabel op naar links.
Dat kan ik imho alleen omzeilen door ook voor de lege cellen een entiteit op te nemen in de database.

If you can judge a wise man by the color of his skin then mister you're a better man than I


  • Janoz
  • Registratie: oktober 2000
  • Laatst online: 00:52

Janoz

Moderator Devschuur®

!litemod

Als je er nu eens voor zorgt dat de resultaten ook in de volgorde terug komen zoals je ze ook in de tabellen kwijt moet? Dus eerst sorteren op de het eerste teken, daarna op het laatste en vervolgens op het tweede teken (ik vraag me af of het sowieso niet handiger is om daar 3 kolommen voor te nemen, maar op basis van deze mock gegevens is daar verder weinig over te zeggen natuurlijk). Door het op die volgorde te sorteren kom het in exact dezelfde volgorde uit de database als het ook in de html moet. Nu kun je op basis van het huidige en het vorige element bepalen of er een nieuwe tabel, nieuwe row of hoeveel lege cellen er ergens neergezet moeten worden.

Ken Thompson's famous line from V6 UNIX is equaly applicable to this post:
'You are not expected to understand this'


  • sjunnie
  • Registratie: september 2001
  • Laatst online: 00:56

sjunnie

U mag ook Sjun zeggen

Topicstarter
Ik begin er meer voor te voelen om het aantal rijen en kolommen gewoon ergens op te slaan (hetzij hardcoded, hetzij in een configuratietabel in de database), en de database ook te vullen met de lege cellen.

Dan hoef ik alleen maar de data op volgorde binnen te halen en met eenvoudige while-loops door de data heen te fietsen.

Lijkt me niet de mooiste oplossing, maar schijnbaar is de recursie die ik hier voor ogen door eerst alles in arrays te plaatsen ook niet echt een oplossing.

If you can judge a wise man by the color of his skin then mister you're a better man than I


  • ajakkes
  • Registratie: maart 2004
  • Laatst online: 05-09 11:21
Je kan eventueel het aantal velden dat AAx en ABx bevat eerst tellen om te kijken hoeveel rijen je moet creëeren.

Door de code op te slaan over 3 velden en als getal voorkom je dat je (mb_substr($row['code'], 1, 1) uit moet voeren.

Maar je kan natuurlijk ook gewoon de hele tabel hardcoded in je pagina plakken.

👑

Pagina: 1


Nintendo Switch (OLED model) Apple iPhone 13 LG G1 Google Pixel 6 Call of Duty: Vanguard Samsung Galaxy S21 5G Apple iPad Pro (2021) 11" Wi-Fi, 8GB ram Nintendo Switch Lite

Tweakers vormt samen met Hardware Info, AutoTrack, Gaspedaal.nl, Nationale Vacaturebank, Intermediair en Independer DPG Online Services B.V.
Alle rechten voorbehouden © 1998 - 2021 Hosting door True

Tweakers maakt gebruik van cookies

Bij het bezoeken van het forum plaatst Tweakers alleen functionele en analytische cookies voor optimalisatie en analyse om de website-ervaring te verbeteren. Op het forum worden geen trackingcookies geplaatst. Voor het bekijken van video's en grafieken van derden vragen we je toestemming, we gebruiken daarvoor externe tooling die mogelijk cookies kunnen plaatsen.

Meer informatie vind je in ons cookiebeleid.

Sluiten

Forum cookie-instellingen

Bekijk de onderstaande instellingen en maak je keuze. Meer informatie vind je in ons cookiebeleid.

Functionele en analytische cookies

Deze cookies helpen de website zijn functies uit te voeren en zijn verplicht. Meer details

janee

    Cookies van derden

    Deze cookies kunnen geplaatst worden door derde partijen via ingesloten content en om de gebruikerservaring van de website te verbeteren. Meer details

    janee