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:
parent
32c1b57387
commit
323bb52c61
|
@ -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).
|
||||
|
|
|
@ -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 {
|
|||
}
|
||||
}
|
||||
|
||||
*/
|
||||
*/
|
||||
|
||||
?>
|
|
@ -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.
|
||||
|
|
Loading…
Reference in New Issue
Block a user