While & query
Ik heb iets als:
Tabel 1: gebruikers
[id][naam][...]
Tabel 2:
[id][id_gebruiker][waarde]
Nu wil ik een tabel tonen als:
|Tabel 1.id|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|
|Tabel 1.id|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|
|Tabel 1.id|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|Tabel 2.waarde|
etc.
Hiervoor heb ik twee while loops met een query daarin wat zorgt voor eindeloos aantal opvragingen. Het script wordt zeer traag...
Hoe los ik dit op?
Groet,
Wat voor database-engine hebben deze tabellen? Ik neem aan dat we het hebben over MySQL? Is dit MyISAM, of InnoDB? Wanneer je een echte relationele database wilt maken is InnoDB waarschijnlijk geschikter omdat je daarmee echt verbanden tussen tabellen kunt aanmaken (foreign keys enzo).
Als de tabellen InnoDB gebruiken en je tabel2.id_gebruiker als foreign key definieert wordt er automatisch een index op aangemaakt, wat zorgt voor snelle lookup.
Voor het geval de tabellen MyISAM zijn loont het de moeite om een index aan te maken op tabel2.id_gebruiker, maar beter zou zijn dat je InnoDB gebruikt, want met MyISAM hangen deze tabellen toch een beetje als los zand aan elkaar en is de kans groot dat er data blijft hangen bij DELETE acties enzo. Het is een stuk makkelijker om referentiële integriteit (onderlinge kloppendheid van data tussen tabellen) te behouden als je hele strakke regels hebt omtrent de verbanden tussen de tabellen, wat vele malen makkelijker te bereiken is met InnoDB.
Gewijzigd op 15/02/2018 16:07:08 door Thomas van den Heuvel
De tabellen zijn in de database niet rechtstreek aan elkaar gekoppeld. Maar persoonlijk denk ik dat het komt omdat ik door de while loop 1000+ queries naar de database stuur.
Is het niet mogelijk dat ik in één query alle data van tabel2 ophaal op basis van het id uit tabel 1 en die allemaal daarna toon? Dat scheelt al behoorlijk wat opvragingen.
En hoe krijg ik die dan in een array zonder while loop?
Niet? Je zult de resultaten nog steeds rij voor rij uit moeten lezen. Maar je hebt maar één while-loop en één query nodig.
Maar daarmee zit ik nog niet op een lekkere snelheid. :-(