Ga naar inhoud
Log in om dit te volgen  
bartv

MySQL performance

Aanbevolen berichten

Beste allemaal,

Ik ben bezig met een paneel waarbij grafieken gemaakt moeten worden dmv PHP, JS en een database. Nu moet ik een grafiek maken per unit. Hij moet dus zoeken: alle rows van deze unit. Hier maakt JS en php een grafiekje mee. Dit is makkelijk als hij moet zoeken: alle rows, maar nu moet het ook per week, per maand etc. Wat is hier de beste oplossing voor?

Ik zat zelf te bedenken: het maandnummer opslaan, het jaartal opslaan, weeknummer opslaan, dag opslaan en naam van de dag (maandag, dinsdag etc) opslaan, of via een timestamp en MySQL vogelt het zelf maar uit, alleen dit laatste kan ik niets vinden op Google hoe je dit goed moet doen. De grafiek per week bestaat namelijk uit: maandag t/m zondag en hierbij de bepaalde gegevens, dit is een bar chart met per dag 5 bars met een ander is. Bar 1 is namelijk gegevens nummer 1, bar 2 is gegevens nummer 2 etc. Deze gegevens nummer staan voor het soort massage wat er is gestart, dus per dag hoeveel massages er zijn geweest, bij maand precies het zelfde maar dan voor een gehele maand.

Wat levert de beste prestatie (er kunnen namelijk tienduizenden rows erin komen te staan, wat uit gaat lopen tot honderdduizenden en verder) en hoe verwerk ik dit in een SQL?

Deel dit bericht


Link naar bericht
Delen op andere sites
Milan (link):
Indexen. Normaliseren.

Als ik het goed begrijp wil je dus kunnen groeperen bij maand, week of dag etc? Je kunt een GROUP BY in MySQL doen op een timestamp, zie http://stackoverflow.com/questions/1736010/how-to-group-by-week-in-mysql.


Dankje voor je reactie maar het klopt niet helemaal, als ik nu een groep doe, dan lijkt het erop dat hij juist van alles 1 row pakt, maar ik moet dus zoiets hebben van:
Van deze maand tot vandaag iedere row per dag. Dus ik moet alle rows hebben van 01-11-2015 en van 02-11-2015 etc. Als ik probeer een SQL te maken met GROUP BY van deze maand, dan krijg ik juist 1 row hiervan, of in ieder geval van de week is dit wel het geval bij een ander voorbeeld.

Ik moet juist hebben, bijvoorbeeld als er een unit een warning heeft gegeven, deze warning mooi en goed kunnen weergeven op de tijdlijn. Dus stel hij geeft vandaag 2 warnings en gisteren 5, dan moet ik die per dag hebben in een lijstje dus zoals:

Vandaag:
- Warning 1 om 10:10: Water te hoog
- Warning 2 om 15:18: Water te laag

Gisteren:
- Warning 1 om 11:11: Water te hoog
- Warning 2 om 11:30: Water te laag
- Warning 3 om 12:00: Water te hoog
- Warning 4 om 13:00: Water te heet
- Warning 5 om 19:00: Water te koud

En dat dan per dag.
Dit principe is hetzelfde voor de grafieken, alleen hier kan ik een COUNT bij gebruiken, maar dit kan niet bij de warnings, is hier ook een optie voor of...?

Deel dit bericht


Link naar bericht
Delen op andere sites
Oh sorry, dan had ik je verkeerd begrepen. Kun je dan niet beter gewoon sorteren op datum en tijd en dan in je software/php kijken of er een andere datum is, en zoja, de nieuwe datum weergeven met de tijden eronder?

Pseudo code:

Codeblok:
1
2
3
4
5
6
7
8
9
10
11
<?php

$lastDate
= xxx;

while ($mysqlResult = ....)
{

    if ($mysqlResult[date] != $lastDate)
    {

        echo $mysqlResult[date];
    }
}


Uiteraard moet je die timestamp dan nog converten naar een datum.

Deel dit bericht


Link naar bericht
Delen op andere sites
Milan (link):
Oh sorry, dan had ik je verkeerd begrepen. Kun je dan niet beter gewoon sorteren op datum en tijd en dan in je software/php kijken of er een andere datum is, en zoja, de nieuwe datum weergeven met de tijden eronder?

Pseudo code:

Codeblok:
1
2
3
4
5
6
7
8
9
10
11
<?php

$lastDate
= xxx;

while ($mysqlResult = ....)
{

    if ($mysqlResult[date] != $lastDate)
    {

        echo $mysqlResult[date];
    }
}


Uiteraard moet je die timestamp dan nog converten naar een datum.


Haha ik zat er net aan te denken, ik zat zo gefocust in MySQL dat ik dit helemaal vergeten was.
Ik heb het uitgewerkt en t werkt goed smiley

Ik zal nu even proberen de grafieken uit te werken via één SQL.


toevoeging op 29 november 2015, 23:56:21:
Het is gefixt, heb gebruik gemaakt van deze SQL:
Codeblok:
1
SELECT massageId, DAYOFWEEK(massageDate) AS Day, COUNT(*) AS totalMas FROM massages WHERE key = herethekey AND YEARWEEK(massageDate, 1) = YEARWEEK(CURDATE(), 1) GROUP BY massageId, DAYOFWEEK(massageDate) ORDER BY massageDate

Deel dit bericht


Link naar bericht
Delen op andere sites

Maak een account aan of log in om te reageren

Je moet lid zijn om een reactie te kunnen achterlaten

Account aanmaken

Maak een account aan in onze gemeenschap. Het is makkelijk!

Registreer een nieuw account

Aanmelden

Ben je al lid? Meld je hier aan.

Nu aanmelden
Log in om dit te volgen  

×