gpt4 book ai didi

php - 需要关于 mysql 规范化和 php 类结构的建议

转载 作者:可可西里 更新时间:2023-11-01 08:08:07 25 4
gpt4 key购买 nike

我正在尝试构建一个记录、媒体(照片、视频、音频)上传统计信息的系统。所以我想出了 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 | |
+-----------+---------+------+-----+---------+----------------+

所有三个表都有相同的字段,因为我认为(到目前为止)我需要区分每个特定表上的媒体,这是多余的吗??

无论如何,因为每个媒体都被同等对待,所以我认为我应该只构建一次类,并根据我当时正在访问的媒体使用这些方法。这是类(class):

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 作为参数的方式。对更好的方法有什么建议吗??我真的很想改进我的代码,非常感谢

问候

更新

好了,根据大家的回答,我想澄清一下:

  1. 我只需要记录上传的媒体
  2. 我已经有另一个单独的表来记录每个媒体的其他信息(长度、文件名、标题等)。

假设我添加了一个名为“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;
}
}

你们怎么看??

再次感谢

最佳答案

将它们全部放在一个表中并有一个 media_type 列。

+-----------+---------+------+-----+---------+----------------+
| 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 | |
| media_type| int | NO | | NULL | |
+-----------+---------+------+-----+---------+----------------+

创建与定义 media_type 的另一个表的外键关系。

+-----------+---------+------+-----+---------+----------------+
| Field | Type | Null | Key | Default | Extra |
+-----------+---------+------+-----+---------+----------------+
| media_type_id| int | NO | PRI | NULL | |
| description | text | NO | | NULL | |
+-----------+---------+------+-----+---------+----------------+

这将包含 media_type_id(例如 1)和 media_type_description(例如音频)。例如

1, audio
2, video
3, photo

然后主表将在每一行中包含 1、2、3 的 ID 以表示它是哪种媒体类型。然后,您可以在您的应用程序中使用它来通过 WHERE 子句来限制您所指的媒体。例如SELECT * FROM maintable WHERE media_type_id = 3 以获取照片。

关于php - 需要关于 mysql 规范化和 php 类结构的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4224797/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com