SQL query's samenvoegen
De bedoeling is om in de database het beveiligingslogboek te bekijken, en bij het ipadres dat op dat moment gebruikt wordt te bekijken hoeveel foutieve inlogpogingen er gedaan zijn de laatste 10 of 60 minuten en 6 en 24 uur.
Eerst had ik 4 query's, om per tijdshoeveelheid te meten, echter lijkt me dat dit simpeler kan.
Uiteindelijk kwam ik met zoiets:
Code (php)
1
2
3
2
3
<?php
$sql = 'SELECT COUNT(*) AS "aantal1" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*10).'" UNION SELECT COUNT(*) AS "aantal2" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*60).'" UNION SELECT COUNT(*) AS "aantal3" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*60*8).'" UNION SELECT COUNT(*) AS "aantal4" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*60*24).'"'
?>
$sql = 'SELECT COUNT(*) AS "aantal1" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*10).'" UNION SELECT COUNT(*) AS "aantal2" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*60).'" UNION SELECT COUNT(*) AS "aantal3" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*60*8).'" UNION SELECT COUNT(*) AS "aantal4" FROM beveiligingslogboek WHERE id>"'.$rij['id'].'" AND ipadres="'.ip().'" AND type="1" AND (melding="4" OR melding="5") AND tijd>="'.(time()-60*60*24).'"'
?>
Maar dit blijkt ook niet goed te werken.
Hoe kan ik ervoor zorgen dat ik na de query dus 4 waardes krijg, bijv. aantal1, aantal2, aantal3, aantal4 met daarin de hoeveelheid inlogpogingen met bijbehorende tijdseenheden?
Om het te versimpelen, mag het op basis van de volgende query gedaan worden:
SELECT COUNT(*) as 'aantal1' FROM logboek WHERE tijd>=w
SELECT COUNT(*) as 'aantal2' FROM logboek WHERE tijd>=x
SELECT COUNT(*) as 'aantal3' FROM logboek WHERE tijd>=y
SELECT COUNT(*) as 'aantal4' FROM logboek WHERE tijd>=z
Gewijzigd op 01/01/1970 01:00:00 door Martijn Verhoef
Vandaag weer enkele dingen gepoogd te doen met union en joins.. echter lukt het me echt niet om ze samen te voegen tot een logisch geheel. Ook meerdere sql query's tegelijk uitvoeren werkt (natuurlijk) niet.
SELECT COUNT(*) as aantal FROM counter GROUP BY ip telte het aantal ip adressen in COUNTER
SELECT COUNT(*) as 'aantal1' FROM logboek GROUP BY tijd zal per tijd het aantal geven
werkt perfect; dank!