Hallo,
ich habe bisher vor allem mit Objective-C und Python gearbeitet, und seit 2-3 Monaten beschäftige ich mich nun mit PHP. Dabei bin ich auf eine Frage gestossen, die mich ein wenig beschäftigt. Ich würde gerne wissen, wie ihr das machen würdet oder macht.
Ich habe eine Datenbanktabelle 'countries' und ein entsprechendes Objekt 'Country'. Ein Datensatz aus der Tabelle entspricht einer Instanz des Objekts, soweit so gut.
Was macht ihr nun, wenn ihr alle oder sagen wir 40 Datensätze haben wollt? Ich habe mir dafür eine statische Funktion 'getAll' (siehe Code weiter unten) geschrieben, die ein Array mit Country-Instanzen zurückgibt. Was mich hier ein wenig stört ist, dass ich ja dann 41 Select-Statements haben würde.
Was meint ihr dazu? Wie könnte man das performanter machen? Theoretisch finde ich den Ansatz eigentlich richtig, doch praktisch... hm.
Danke und Grüße.
Stefan
ich habe bisher vor allem mit Objective-C und Python gearbeitet, und seit 2-3 Monaten beschäftige ich mich nun mit PHP. Dabei bin ich auf eine Frage gestossen, die mich ein wenig beschäftigt. Ich würde gerne wissen, wie ihr das machen würdet oder macht.
Ich habe eine Datenbanktabelle 'countries' und ein entsprechendes Objekt 'Country'. Ein Datensatz aus der Tabelle entspricht einer Instanz des Objekts, soweit so gut.
Was macht ihr nun, wenn ihr alle oder sagen wir 40 Datensätze haben wollt? Ich habe mir dafür eine statische Funktion 'getAll' (siehe Code weiter unten) geschrieben, die ein Array mit Country-Instanzen zurückgibt. Was mich hier ein wenig stört ist, dass ich ja dann 41 Select-Statements haben würde.
Was meint ihr dazu? Wie könnte man das performanter machen? Theoretisch finde ich den Ansatz eigentlich richtig, doch praktisch... hm.
Danke und Grüße.
Stefan
PHP Code:
<?php
class Country extends Coordinate {
private $db = NULL;
const TABLE = COUNTRY;
private $id = 0;
// weitere vars
// ...
// ...
public function __construct($id, $db = NULL) {
$this->id = intval($id);
if($db != NULL) {
$this->db = $db;
}
else {
$this->db =& MDB2::singleton();
}
$sql = 'SELECT de, en, lon, lat, gm_code, iso, status FROM ' . self::TABLE . ' WHERE id = ' . $this->id;
$res = $this->db->queryRow($sql);
if (PEAR::isError($res)) { die($res->getMessage()); }
if(count($res) == 0) {
// raise error
}
else {
$this->nameDe = stripslashes($res['de']);
$this->nameEn = stripslashes($res['en']);
$this->iso = stripslashes($res['iso']);
$this->lon = $res['lon'];
$this->lat = $res['lat'];
$this->gmcode = $res['gm_code'];
$this->status = $res['status'];
}
}
// weitere funktionen
// ...
// ...
public static function getAll($where = '', $db = NULL) {
$countries = array();
if($db == NULL) {
$db =& MDB2::singleton();
}
$sql = 'SELECT id FROM ' . Country::TABLE . (!empty($where) ? ' WHERE = ' . $where : '');
$res = $db->queryAll($sql);
if (PEAR::isError($res)) { die($res->getMessage()); }
$counter = count($res);
if($counter > 0) {
for($i = 0; $i < $counter; $i++) {
$countries[$i] = new Country($res[$i]['id']);
}
}
return $countries;
}
}
?>
Comment