SQL query's samenvoegen

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Martijn Verhoef

Martijn Verhoef

03/04/2009 18:30:00
Quote Anchor link
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:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
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).'"'
?>


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
 
PHP hulp

PHP hulp

07/05/2024 15:42:17
 
Martijn Verhoef

Martijn Verhoef

04/04/2009 20:01:00
Quote Anchor link
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.
 
Klaasjan Boven

Klaasjan Boven

04/04/2009 22:39:00
Quote Anchor link
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
 
Martijn Verhoef

Martijn Verhoef

05/04/2009 11:32:00
Quote Anchor link
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:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
SELECT SUM(CASE WHEN tijd BETWEEN x AND y THEN 1 ELSE 0 END) FROM beveiligingslogboek


werkt perfect; dank!
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.