Php 为动态数据或更好的解决方案创建20个相关表-MySQL
我正在寻找更好的解决方案,以满足我的以下要求 我必须存储用户最喜欢的东西,如-Php 为动态数据或更好的解决方案创建20个相关表-MySQL,php,mysql,database-design,relational-database,database-schema,Php,Mysql,Database Design,Relational Database,Database Schema,我正在寻找更好的解决方案,以满足我的以下要求 我必须存储用户最喜欢的东西,如- 电影 名字 类型//喜欢科幻、惊悚、喜剧、浪漫 网址[如有的话] 音乐 名字 类型 网址[如有的话] 烹饪 名字 类型 网址[如有的话] 运动 名字 类型 网址[如有的话] 等等, 对于每个收藏夹,此收藏夹列表可以增长更多 以上各栏将针对每个喜爱的项目。我目前的解决方案是为每个喜爱的事物创建表格,如[喜爱的电影、喜爱的运动等]。但是,由于这些最喜欢的项目可能会增加,我不想再从MySQL中为此创建另一个表 因此
我会用这种方式来处理这个问题
______________________________________________________________
| UniqueID | FavouriteID | Data | Name | Page Link | Type |
| Int(11) | Int(11) | Blob | varchar | Varchar | Int? |
______________________________________________________________
第二桌
___________________________
| UniqueID | FavouritName |
| INT(11) | VarChar |
___________________________
在表2 UniqueID和表1 FavoritId之间创建外键
当通过PHP访问时,我自己使用这组函数
function RDataLink($field, $table, $current=""){
accessDB();
$QTable=mysql_query("SHOW CREATE TABLE $table");
$Table=mysql_result($QTable,0,1);
exitDB();
// CONSTRAINT `jobSeeker_ibfk_1` FOREIGN KEY (`location`) REFERENCES `24_location` (`UID`)
$x=preg_match_all('/FOREIGN[^(]+.[^(]+[^)]+./',$Table,$matches);
foreach ($matches as $array){
foreach ($array as $value){
if(preg_match("/(?<=FOREIGN\sKEY.{3})$field/",$value)){
if (preg_match("/(?<=REFERENCES[^`].)[^`]+/",$value,$ForeignTable)){
accessDB();
$Qrows=mysql_query("SELECT * FROM ".$ForeignTable[0]);
exitDB();
$options="<select name=\"$field\">";
while ($rows=mysql_fetch_array($Qrows,MYSQL_ASSOC)){
$options.="<option value=\"".$rows['UID']."\"".($current==$rows['UID'] ? "selected" : "") .">".$rows['name']."</option>";
}
$options.="</select>";
}
}
}
}
if(!$x){
return false;
}
else {
return $options;
}
}
function RQuery($field,$table,$current){
accessDB();
$QTable=mysql_query("SHOW CREATE TABLE $table");
$Table=mysql_result($QTable,0,1);
exitDB();
$x=preg_match_all('/FOREIGN[^(]+.[^(]+[^)]+./',$Table,$matches);
foreach ($matches as $array){
foreach ($array as $value){
if(preg_match("/(?<=FOREIGN\sKEY.{3})$field/",$value)){
if (preg_match("/(?<=REFERENCES[^`].)[^`]+/",$value,$ForeignTable)){
accessDB();
$Qrow=mysql_query("SELECT name FROM ".$ForeignTable[0]." WHERE UID='$current'");
return mysql_result($Qrow,0);
exitDB();
}
}
}
}
}
函数RDataLink($field,$table,$current=”“){
accessDB();
$QTable=mysql_查询(“显示创建表$TABLE”);
$Table=mysql\u结果($QTable,0,1);
exitDB();
//约束'jobseker'u ibfk'u 1'外键('location`)引用'24'u location`('UID`)
$x=preg_match_all('/FOREIGN[^(+.[^(+.]+[^)]+./',$Table,$matches);
foreach($matches as$array){
foreach($array作为$value){
如果(preg_match(“/(?您可以创建一个主表tbl_favoritemaster
来存储最喜欢的项目列表(例如电影、书籍等),并使用子表tbl_FavoriteMealture
来存储用户最喜欢的内容(例如用户了解的电影细节、用户了解的书籍细节等)。使用此结构,您无需为所有常用项列表创建更多表
1.tbl\u favoritemaster
Column List: favoriteId (PK), favoriteName
Data:
| favoriteId | favoriteName |
| 1 | Movie |
| 2 | Book |
2.待详细说明
Column List: Id (PK), favoriteId (Reference to tbl_favoritesmaster), Name, Type, URL
Data:
| Id | favoriteId | Name | Type | URL |
| 1 | 1 | M1 | T1 | URL1 |
| 1 | 2 | B1 | T2 | URL2 |
由于电影、音乐……可能具有不同的属性,因此为有利的实体建立一个基本表可能有以下作用: