Ich hab da mal eine allgemeine Frage wie ihr das in eurem Projekten so löst was das filtern und sortieren von Datenbankabfragen betrifft.
Ich habs bei mir so gelöst dass ich eine eigene Sortier Helper Klasse aufbaue. Zum Beispiel so:
Daneben hab ich eine Klasse mit der ich Beispielsweise Events aus der Datenbank hole:
Natürlich gibt es sehr viele solche Klassen die mir Listen mit Daten ausgeben. Diese kann ich dann schön bequem wie folgt sortieren und ausgeben lassen:
Meine Frage an euch Profis ist nun ob dies eine saubere Methode ist oder ob ihr da in der Praxis die Thematik anders löst.
Beispielsweise auch die Frage, hole ich mir die Daten gefiltert aus der Datenbank und bastle das spezifische SQL Query in meiner Klasse zusammen und feure es erst bei der Ausgabe ab, oder lad ich die Datensätze in mein Objekt und filtere dieses dann?
Für eure Feedbacks bedanke ich mich herzlich.
Grüsse
eXe
Ich habs bei mir so gelöst dass ich eine eigene Sortier Helper Klasse aufbaue. Zum Beispiel so:
PHP-Code:
class sorter {
// Sort a Multidimensional array by a given value and direction
public function sortMultiArray($array,$value,$direction = "asc"){
foreach($array as $k=>$v) {
$b[$k] = strtolower($v[$value]);
}
if($direction == "asc"){
asort($b);
}else{
arsort($b);
}
foreach($b as $key=>$val) {
$c[] = $array[$key];
}
return $c;
}
}
PHP-Code:
class events {
function __construct() {
// Set the database connection
$this->con = new clientDB();
$this->con->db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_SILENT);
// Get all Events into our object
$sql = $this->con->db->prepare("Select * from db_eventIndex");
$sql->execute();
$this->events = $sql->fetchAll(PDO::FETCH_ASSOC);
}
// Get project dependet events
function setFilterProject($pID){
$i = 0;
foreach($this->events as $event){
if($event["projectID"] <> $pID){
unset($this->events[$i]);
}
$i++;
}
}
// Get user dependet events
function setFilterUser($uID){
$i = 0;
foreach($this->events as $event){
// See on which event I'm connected
$sql = $this->con->db->prepare("Select * from db_eventMembers WHERE userID = ? and eventID = ?");
$sql->bindValue(1,$uID,PDO::PARAM_STR);
$sql->bindValue(2,$event["ID"],PDO::PARAM_STR);
$sql->execute();
$res = $sql->fetch(PDO::FETCH_ASSOC);
if($res["eventID"] <> $event["ID"]){
unset($this->events[$i]);
}
$i++;
}
}
// Throw the events
function dropEvents(){
return $this->events;
}
PHP-Code:
<?PHP
$events = new events();
$events->setFilterUser($_SESSION["system"]["user"]["id"]);
$mylist = new sorter();
$mylist = $mylist->sortMultiArray($events->dropEvents(), "eventStart");
if(count($mylist) > 0){
foreach($mylist as $event){
$eventDate = new date($event["eventStart"]);
echo '<li>'.$eventDate->getDate().' - '.$event['eventName'].'</li>';
}
}else{
echo "<p>Zur Zeit keine anstehenden Termine.</p>";
}
?>
Beispielsweise auch die Frage, hole ich mir die Daten gefiltert aus der Datenbank und bastle das spezifische SQL Query in meiner Klasse zusammen und feure es erst bei der Ausgabe ab, oder lad ich die Datensätze in mein Objekt und filtere dieses dann?
Für eure Feedbacks bedanke ich mich herzlich.
Grüsse
eXe

Kommentar