grafiek opmaken per maand van het jaar
En MariaDB vanaf 10.2.1.
Ben er zelf uit geraakt en mijn grafiek is gemaakt.
nogmaals mijn dank
Fijn dat het gelukt is. Veel succes ermee.
- Ariën - op 31/10/2023 00:09:00:
Ook dat is een mogelijkheid. Enige nadeel is dat de queries wat complexer te lezen zijn.
Zo ingewikkeld is die query toch niet?
De enige extra kennis die je nodig hebt is die van CTE's en window-functies.
Je kunt de query ook herschrijven zonder CTE, dan hoef je alleen het concept van windowfuncties te snappen.
En er staat tegenover dat je minder eigen code in PHP hebt:
- dataverwerking in de database is over het algemeen sneller
- het scheelt unit tests
- het scheelt onderhoud
- het scheelt eventueel porteren van code
Owh en de vraag is gesteld in de rubriek "Databases & SQL", dus dan ligt een SQL-oplossing meer voor de hand dan een PHP of JavaScript oplossing ;-)
Het zal niet ingewikkeld zijn, maar je moet het wel even doorhebben ;-)
Respect dat je dit soort oplossingen zoekt in de hoek van SQL. Misschien is dat onderdeel van jouw job? Maar zelf ben ik liever gewend om dit in PHP op te lossen. Voor een simpele site zal het echt nano-seconden verschil zijn of je het vanuit PHP of SQL oplost. Maar met een drukke site (en grotere database) kan je vast en zeker zeker wel verschil zien.
Ik ga je query zeker even napluizen. Aldoende leert men bij in de onuitputtelijke wereld van programmeren. :-)
- Ariën - op 31/10/2023 12:25:58:
Er leiden inderdaad vele wegen naar Rome.
Het zal niet ingewikkeld zijn, maar je moet het wel even doorhebben ;-)
Respect dat je dit soort oplossingen zoekt in de hoek van SQL. Misschien is dat onderdeel van jouw job? Maar zelf ben ik liever gewend om dit in PHP op te lossen. Voor een simpele site zal het echt nano-seconden verschil zijn of je het vanuit PHP of SQL oplost. Maar met een drukke site (en grotere database) kan je vast en zeker zeker wel verschil zien.
Ik ga je query zeker even napluizen. Aldoende leert men bij in de onuitputtelijke wereld van programmeren. :-)
Het zal niet ingewikkeld zijn, maar je moet het wel even doorhebben ;-)
Respect dat je dit soort oplossingen zoekt in de hoek van SQL. Misschien is dat onderdeel van jouw job? Maar zelf ben ik liever gewend om dit in PHP op te lossen. Voor een simpele site zal het echt nano-seconden verschil zijn of je het vanuit PHP of SQL oplost. Maar met een drukke site (en grotere database) kan je vast en zeker zeker wel verschil zien.
Ik ga je query zeker even napluizen. Aldoende leert men bij in de onuitputtelijke wereld van programmeren. :-)
Ik houd me tegenwoordig vooral bezig met Rust en PostgreSQL, ondertussen begint PHP roestig te worden. Ik had na een jaar zonder PHP al moeite met de '->' notatie van objecten en de haakjes van een if-statement en het feit dat een if-statement geen expressie is...
Wat ik maar wil zeggen; alles went. De vraag is meer waar je mee bezig wilt zijn.
Wat betreft de CTE, die is vooral leuk als je het 'recursive' wilt doen. Het kan complex, zoals hier maar in de wereld van PHP kan je er in 1 query is het handiger om bijvoorbeeld een hele boomstructuur op te vragen. Dat kan eenvoudig als een kolom verwijst naar de primaire sleutel van dezelfde tabel.
Ik gebruik CTE graag om queries op te delen in overzichtelijke stappen:
Code (php)
1
2
3
4
5
6
7
2
3
4
5
6
7
WITH mijneerstequery AS (
... hier een select qeury
), mijntweedequery AS (
SELECT * FROM mijneerstequery
)
SELECT *
FROM mijntweedwequery;
... hier een select qeury
), mijntweedequery AS (
SELECT * FROM mijneerstequery
)
SELECT *
FROM mijntweedwequery;
Je kunt meerdere queries aaneenrijgen elk tussenresultaat wordt maar 1 keer uitgerekend en staat vast. Het nadeel is dat je moet uitkijken dat je geen handige indexes mist, de query kan daardoor traag worden. Maar bij kleine gegevenssets maakt dat niet uit.
Het is vooral handig voor het uitrekenen van tussenresultaten, of als je iets hebt ge-INSERT kan je de opgeslagen gegevens hergebruiken in een volgende query via INSERT ... RETURNING.
Toevoeging op 31/10/2023 21:00:52:
En wat betreft de window-functies, die heb je in 2 categoriën:
1. functies die alleen maar als window functie voorkomen, zoals met LAG() waarbij je in je rij een waarde hebt uit een vorige rij. Het hele rijtje (MySQL) kan je hier vinden.
2. aggregatie-functies zoals COUNT() en SUM() die je ook als window-functie kan gebruiken.
Bij window functies geef je een extra commando OVER(), waarin je de GROUP BY en de ORDER BY voorwaarden zet. Dan krijg je die output over meerdere rijen in een enkele rij. Het is handig voor aantallen, maar ook voor strings, en het wordt ook gebruikt om complete JSON-strings in de database te maken. Databases hebben ook support voor JSON als gegevenstype.
Kortom, databases kunnen véél meer dan alleen gegevens in tabellen opslaan, het loont de moeite om er eens naar te kijken. Dan ben je zelf minder geneigd om elke keer het wiel uit te vinden in PHP. (Dan blijft er nog meer dan genoeg te doen in PHP..)
En als je de data verwerkt in de database, dan scheelt dat in ieder geval I/O naar de webserver met PHP.
Toevoeging op 01/11/2023 09:21:52:
Nog een kleine aanvulling uit eigen ervaring.
Databases hebben wel een gedeelde "ANSI SQL-syntax", maar de syntax van de ene database is eigenlijk nooit 1-op-1 uitwisselbaar met een database van een ander merk. (Behalve misschien bij MariaDB en MySQL). Als je je veel bezig houdt met SQL en je project zou in de toekomst groter kunnen worden, dan kan overschakelen naar een andere database maanden werk kosten. Als je in de de open source hoek wil blijven (wat meestal het geval is bij PHP) dan is PostgreSQL de meest uitgebreide database om te gaan gebruiken.