Récupération de données dans la BDD.

Mais ça coince pour les tris. Je vais passer à une organisation avec une table par classe / type de page + une table pour les attributs communs à toutes les pages.
This commit is contained in:
Georges Dupéron 2010-10-11 17:08:27 +02:00
parent 32c1b57387
commit 323bb52c61
3 changed files with 54 additions and 14 deletions

View File

@ -4,4 +4,4 @@
ElementDocument, et GalerieIndex::res_c_style() renvoie du texte (CSS) pour inclusion dans le CSS principal... alors que
res_c_style_supplémentaire() fait je-sais-pas-quoi...
Comment gérer tout ça ? Selon le type de ressource on envoie direct ou on récupère (html,css => récup, img => envoi).
Comment gérer tout ça ? Selon le type de ressource on envoie direct ou on récupère (html,css => récup, img => envoi).

View File

@ -31,6 +31,7 @@ class BDD {
if (!is_resource(self::$handle)) {
Debug::error("Échec à la connexion à la base de données");
}
self::begin_transaction();
self::init();
}
return self::$handle;
@ -43,7 +44,6 @@ class BDD {
self::unbuf_query('drop table if exists ' . self::table("proprietes"));
self::init();
}
public static function init() {
self::unbuf_query("create database if not exists " . Config::get('db_base'));
mysql_select_db(Config::get('db_base'), self::$handle) or Debug::sqlerror();
@ -75,15 +75,22 @@ class BDD {
self::modify("insert into " . self::table("proprietes") . " values(0, 0, true, 'composant_url', '')");
}
public static function begin_transaction() {
self::unbuf_query('begin');
}
public static function commit() {
self::unbuf_query('commit');
}
public static function unbuf_query($q) {
debug::info("sql : " . $q . ";");
mysql_unbuffered_query($q . ";", self::get()) or Debug::sqlerror();
}
public static function select($cols, $table, $filter = "") {
$q = "select $cols from " . self::table($table) . " $filter;";
public static function select($q) {
debug::info("sql : " . $q);
$qres = mysql_query($q, self::get()) or Debug::sqlerror();
$qres = mysql_query($q, BDD::get()) or Debug::sqlerror();
$ret = array();
while ($row = mysql_fetch_array($qres)) {
$ret[] = $row;
@ -101,14 +108,15 @@ class BDD {
}
public static function close() {
mysql_close(self::get()) or Debug::sqlerror();
self::$handle = null;
if (is_resource(self::$handle)) {
self::commit();
mysql_close(self::get()) or Debug::sqlerror();
self::$handle = null;
}
}
}
/*
/*
class DB extends Selectable {
private static $handle = null;
@ -155,6 +163,6 @@ class Selectable {
}
}
*/
*/
?>

View File

@ -74,14 +74,46 @@ class Page {
public function enfants($condition = true, $ordre = "date_creation desc", $limit = 0, $offset = 0) {
// Renvoie un objet de la classe CollectionPages.
// Si $condition === true, il n'y a pas de condition
// ex: $condition = "@apercu = true"
// sinon, par ex: $condition = "@apercu = true"
// ordre = null => ordre = "date_creation desc"
// limit = null || limit = 0 => pas de limite
// offset = null => offset = 0
var_dump(BDD::select("uid_page", "enfants", "where uid_page_parent = " . $this->uid()));
// Deux possibilités :
// 1) On select tous les rangs qui correspondent à une des $condition,
// puis on group by having count(uid_page) = <nombre de condition>.
// 2) On met chaque "type" (galerie-index, ...) dans une table séparée,
// et on a une table des types. On select dans cette table des types
// les tables qui ont les champs sur lesquels portent les conditions,
// puis on construit une requête comme suit :
// select * from (select uid_page, prop_cond_1, prop_cond_2 from table_1)
// union (select uid_page, prop_cond_1, prop_cond_2 from table_2)
// union (... table_3)
// ... where prop_cond_1 = val_cond_1 and prop_cond_2 = val_cond_2;
// Tous les enfants
$select = "select uid_page from " . BDD::table("enfants") . " where uid_page_parent = " . $this->uid();
if ($condition !== true) {
// Toutes les propriétés des enfants
$select = "select$distinct uid_page from " . BDD::table("proprietes") . " where uid_page in (" . $select . ")";
// Liste des conditions :
$select .= "and (";
$firstcond = true;
foreach ($conditions as $c) {
if (!$firstcond) {
$select .= " or ";
}
$select .= "(nom = '" . mysql_real_escape_string($c["cle"]) . "' and valeur = '" . mysql_real_escape_string($c["valeur"]) . "')";
$firstcond = false;
}
$select .= ") group by uid_page having count(uid_page) = " . count($conditions);
}
var_dump(BDD::select($select . ";"));
niy("enfants__");
}
public function ajouter_enfant($type, $groupe = "main") {
// ajouter l'enfant
// renvoyer une instance de la sous-classe de Page correspondant à $type.