Я пытаюсь построить систему, которая регистрирует, загружает медиа (фото, видео, аудио) статистику. поэтому я придумываю 3 таблицы, 1 для аудио, 1 для видео и 1 для фото. и вот структура
+-----------+---------+------+-----+---------+----------------+
| 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 | |
+-----------+---------+------+-----+---------+----------------+
все три таблицы имеют одинаковые поля, так как я думаю (до сих пор) мне нужно дифференцировать носители в каждой и конкретной таблице, это избыточно ??
в любом случае, так как каждый из носителей обрабатывается одинаково, поэтому я думаю, что я должен создать только один класс и использовать методы в зависимости от того, к какому носителю я обращаюсь в данный момент. вот класс:
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;
}
}
}
Пока это работает, но у меня все еще есть сомнения в том, как разбить таблицу на 3 таблицы, и как я использую $ table_name в качестве параметра. какие-либо предложения для лучшего подхода? я действительно хочу улучшить свои коды, большое спасибо
Привет
UPDATE
хорошо, основываясь на ответе каждого, я бы хотел кое-что прояснить:
- мне нужно только войти в загруженный носитель
- У меня уже есть отдельная таблица для записи другой информации (длина, имя файла, заголовки и т. Д.) Для каждого носителя.
позвольте мне просто сказать, что я добавляю поле с именем «media_id» и объединяю таблицу в одно, и, поскольку способ, которым я добавляю и обновляю свои строки, основан на дате-дне, он вставит, если заданная дата-день и member_id не найден, и в противном случае он будет ОБНОВЛЕНИЕ, я думаю, что я должен также изменить способ, которым работает мой метод add_log (), на что-то вроде:
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;
}
}
что вы, ребята, думаете ??
еще раз спасибо