MySQL performance

Gestart doorBartv4 reacties249 weergaven

5 berichten · pagina 1 van 1

Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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?
0
Bartv

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Milan schreef:
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 1010 Water te hoog
- Warning 2 om 1518 Water te laag

Gisteren:
- Warning 1 om 1111 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...?
0
Berichten
8.602
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
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:

[COLOR= #0000BB]<?php

$lastDate[/COLOR] [COLOR= #007700]=[/COLOR] xxx[COLOR= #007700];[/COLOR]

[URL="http://www.php.net/while"]while[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$mysqlResult[/COLOR] [COLOR= #007700]= ....)
{[/COLOR]
    [URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$mysqlResult[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]date[/COLOR][COLOR= #007700]] !=[/COLOR] [COLOR= #0000BB]$lastDate[/COLOR][COLOR= #007700])
    {[/COLOR]
        [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$mysqlResult[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]date[/COLOR][COLOR= #007700]];
    }
}[/COLOR]


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

Lid · Topicstarter

Berichten
4.451
Reputatie
0
Punten
0,00
Lid sinds
Laatst gezien
Milan schreef:
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:
[COLOR= #0000BB]<?php

$lastDate[/COLOR] [COLOR= #007700]=[/COLOR] xxx[COLOR= #007700];[/COLOR]

[URL="http://www.php.net/while"]while[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$mysqlResult[/COLOR] [COLOR= #007700]= ....)
{[/COLOR]
    [URL="http://www.php.net/if"]if[/URL] [COLOR= #007700]([/COLOR][COLOR= #0000BB]$mysqlResult[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]date[/COLOR][COLOR= #007700]] !=[/COLOR] [COLOR= #0000BB]$lastDate[/COLOR][COLOR= #007700])
    {[/COLOR]
        [URL="http://www.php.net/echo"]echo[/URL] [COLOR= #0000BB]$mysqlResult[/COLOR][COLOR= #007700][[/COLOR][COLOR= #DD0000]date[/COLOR][COLOR= #007700]];
    }
}[/COLOR]


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 smile
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:

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
0

Jouw reactie

Deel je idee, stel een vraag of help een ander verder.

Editor laden…

Praat mee met de One2xs-community.

Inloggen om te reageren