Na veel geprobeer met unions en joins lukt het me echt niet om eruit te komen.

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:
<?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).'"'
?>

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
Al hou ik niet van bumpen, bij deze toch nog een verzoek om ernaar te kijken.

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.
Ik mis sowieso de GROUP BY in alle sqlletjes

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



Niet met GROUP (niet nodig) is het me gelukt, maar toch met jouw post. Reden; na daarop te googlen en gelijkwaardige problemen op te zoeken vond ik de 'case' mogelijkheid.. dus het is iets geworden als:


SELECT SUM(CASE WHEN tijd BETWEEN x AND y THEN 1 ELSE 0 END) FROM beveiligingslogboek


werkt perfect; dank!

Reageren