mysql normalleşme ve php sınıf yapısına tavsiyeye ihtiyaç

0 Cevap php

i medya (fotoğraf, video, ses) istatistik upload günlükleri bir sistem oluşturmaya çalışıyorum. bu yüzden fotoğraf video için ses, 1, ve 1 için 3 masa, 1 ile geldi. ve burada yapı bulunuyor

+-----------+---------+------+-----+---------+----------------+
| Field     | Type    | Null | Key | Default | Extra          |
+-----------+---------+------+-----+---------+----------------+
| id        | int(11) | NO   | PRI | NULL    | auto_increment |
| member_id | int(10) | NO   |     | NULL    |                |
| counter   | int(11) | NO   |     | NULL    |                |
| daydate   | text    | NO   |     | NULL    |                |
| epochtime | text    | NO   |     | NULL    |                |
+-----------+---------+------+-----+---------+----------------+

i (şimdiye kadar) i her ve özellikle masaya ortama ayırt etmek gerektiğini düşünüyorum beri her üç tablo, aynı alanlara sahip, bu gereksiz olduğunu?

Zaten medyanın her yana aynı muamele, bu yüzden ben sadece sınıf bir kez oluşturmak ve tür i anda erişen ben ne medya bağlı yöntemlerini kullanmak gerektiğini düşünüyorum edilir. Burada bir sınıf:

require_once(INC_PATH.DS.'database.php');

    class Log extends DatabaseObject {

        protected static $db_fields = array('id', 'member_id', 'counter',  'daydate', 'epochtime');

        public $id;
        public $member_id;
        public $counter;
        public $daydate;
        public $epochtime;

        public function find_counter($table_name){
            global $database;
            $time = date('d-m-Y');
            $timestamp = time();

            $sql  = "SELECT * FROM ". $table_name;
            $sql .= " WHERE daydate = '".$this->daydate."'";            
            $sql .= " AND member_id = '".$this->member_id."'";

            return self::find_by_sql($sql);
        }

        public function add_log($table_name){
            global $database;
            $tes = $this->find_counter();

            if(!empty($tes)){
                $sql  = "UPDATE ".$table_name;
                $sql .= " SET counter = counter+1";
                $sql .= " WHERE daydate = '".$this->daydate."'";
                $sql .= " AND member_id = '".$this->member_id."'";

                $database->query($sql);
                return ($database->affected_rows() == 1) ? true : false;
            }else{

                $sql  = "INSERT INTO ".$table_name;
                $sql .= " (id, member_id, user_privelege, counter, daydate, epochtime)";
                $sql .= " VALUES ('', '".$this->member_id."'";
                $sql .= " , '".$this->user_privelege."', '1', '".$this->daydate."', '".$this->epochtime;
                $sql .= "')";

                $database->query($sql);
                return ($database->affected_rows() == 1) ? true : false;
            }
        }

  }

şimdiye kadar bu hemen hemen çalışıyor ama, ben hala ben 3 tablolar tabloyu kırmak arada, ve ben parametre olarak $ Tablo_ismi kullanın yolda şüphelerim var. daha iyi bir yaklaşım için herhangi bir öneriniz? Ben gerçekten, benim kodları geliştirmek istiyorsanız, çok teşekkür ederim

Selamlar

UPDATE

Tamam, herkesin cevap dayalı, ben bazı şeyleri açıklığa kavuşturmak istiyorum:

  1. ben sadece yüklenen medya oturum açmanız gerekir
  2. ben zaten her medya için diğer bilgiler (uzunluk, dosya adı, başlık, vb) kaydetmek için başka bir ayrı tablo var.

sadece ben "media_id" olarak adlandırılan bir alan ekleyin ve içine bir tablo birleştirme ve verilen Daydate ve member_id bulunamadı değilse i gün güncel dayanmaktadır eklemek ve benim satırları güncelleştirmek yolu bu yana, bu INSERT söylüyorlar sağlar , ve aksi takdirde ben de benim add_log () yöntemi gibi bir şey haline, çalışma biçimini değiştirmek gerektiğini düşünüyorum, olacak UPDATE:

public function add_log($table_name, $media_id){
    global $database;
    $tes = $this->find_counter();

    if(!empty($tes)){
        $sql  = "UPDATE ".$table_name;
        $sql .= " SET counter = counter+1";
        $sql .= " WHERE daydate = '".$this->daydate."'";
        $sql .= " AND member_id = '".$this->member_id."'";
        $sql .= " AND media_id = '".$media_id."'";

        $database->query($sql);
        return ($database->affected_rows() == 1) ? true : false;
    }else{

        $sql  = "INSERT INTO ".$table_name;
        $sql .= " (id, member_id, media_id, counter, daydate, epochtime)";
        $sql .= " VALUES ('', '".$this->member_id."'";
        $sql .= " , '".$media_id."', '1', '".$this->daydate."', '".$this->epochtime;
        $sql .= "')";

        $database->query($sql);
        return ($database->affected_rows() == 1) ? true : false;
    }
}

Siz ne düşünüyorsunuz?

tekrar teşekkürler

0 Cevap