Basti_2015
Mitglied
Hallo, ich gebe Aktivitätslogs aus und sortiere diese einmal für den Nutzer und für den Admin. Der Nutzer sieht nur seine, der Admin/Verwaltung sieht alle Einträge.
legende: Area 1 sind eigene activities, Area2 sind Admin/Verwaltungsrelevant, Area 3 sind für alle, zB Rundmails.
Jetzt möchte ich jedoch nur noch die letzten zwei Wochen anzeigen lassen. Durch die OR Klausel wird jedoch das zweite AND übergangen.
Ich kann natürlich über eine IF Else Anweisung die Anfrage vor der Ausgabe filtern, möchte aber nicht jedesmal den ganzen Datenbankcontent laden, daher würde ich nur die benötigten Daten auslesen.
PHP:
if($userID['u_status']>=100) {
$query = "SELECT * FROM `activities` WHERE (`a_area`=1 AND `a_sender`=:user) OR `a_area`=2 OR `a_area`=3 ORDER BY `a_time` DESC";
$statement = $this->prepare($query);
$statement->bindParam(':user', $userID['u_id'], PDO::PARAM_INT);
} else {
$query = "SELECT * FROM `activities` WHERE (`a_area`=1 AND `a_sender`=:user) OR `a_area`=3 ORDER BY `a_time` DESC";
$statement = $this->prepare($query);
$statement->bindParam(':user', $userID['u_id'], PDO::PARAM_INT);
}
legende: Area 1 sind eigene activities, Area2 sind Admin/Verwaltungsrelevant, Area 3 sind für alle, zB Rundmails.
Jetzt möchte ich jedoch nur noch die letzten zwei Wochen anzeigen lassen. Durch die OR Klausel wird jedoch das zweite AND übergangen.
SQL:
SELECT * FROM `activities` WHERE (`a_area`=1 AND `a_sender`=1 AND `a_time`>=1484997631) OR `a_area`=2 OR `a_area`=3 ORDER BY `a_time` DESC
Ich kann natürlich über eine IF Else Anweisung die Anfrage vor der Ausgabe filtern, möchte aber nicht jedesmal den ganzen Datenbankcontent laden, daher würde ich nur die benötigten Daten auslesen.