Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/285.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/55.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 为每个注册网站的用户动态创建一个DB表,这可能是一个解决方案吗?_Php_Mysql_Codeigniter - Fatal编程技术网

Php 为每个注册网站的用户动态创建一个DB表,这可能是一个解决方案吗?

Php 为每个注册网站的用户动态创建一个DB表,这可能是一个解决方案吗?,php,mysql,codeigniter,Php,Mysql,Codeigniter,只是出于好奇,因为它可以解决我的大多数问题,比如查询多个字段和比较多个表——意大利面条缠结。 它有多安全?这是坏习惯还是好习惯。如果可以的话,在安全方面应该采取哪些预防措施 问题在于三个表的关系:“用户”、“朋友”和“帖子” 用户: 身份证件 名称 姓氏 电子邮件 等 朋友们: 伊迪特 用户ID 1int userid2int 友谊是你所要求的 接受的varchar 阻塞整数 阻塞比因 结交 职位: 邮递 用户标识 后置文本; 等 我在查询“friends”TBL时遇到问题,无法获取与登录用户为

只是出于好奇,因为它可以解决我的大多数问题,比如查询多个字段和比较多个表——意大利面条缠结。 它有多安全?这是坏习惯还是好习惯。如果可以的话,在安全方面应该采取哪些预防措施

问题在于三个表的关系:“用户”、“朋友”和“帖子”

用户:

身份证件 名称 姓氏 电子邮件 等 朋友们:

伊迪特 用户ID 1int userid2int 友谊是你所要求的 接受的varchar 阻塞整数 阻塞比因 结交 职位:

邮递 用户标识 后置文本; 等 我在查询“friends”TBL时遇到问题,无法获取与登录用户为好友的用户ID,因为有两个字段可以比较“user_id1”和“user_id2”,然后从posts表中按desc”顺序提取所有结果是一场噩梦,否则我肯定对mysql非常生疏。我的快捷方式是,如果我可以为每个用户提供一个table/db,那么只有一个“friend_id”的朋友就只有一个table,我想这会简单得多

意大利面:

  function getPosts($email){
                 $myid = $this->getStudentId($email);
                 $sql = "SELECT DISTINCT user_id1 FROM friends
                        UNION 
                        SELECT DISTINCT user_id2 FROM friends
                       WHERE (user_id1 = ? AND accepted = ? AND blocked = ?)
                           OR (user_id2 = ? AND accepted = ? AND blocked = ?)";

                $query =  $this->db->query($sql,array($myid,'yes','no',$myid,'yes','no'));

                if($query->num_rows() > 0){
                    foreach ($query->result() as $r){

                           //echo "<br>my id1: ".$student_id1;
                         echo "<br> rows : ". $query->num_rows;
                         echo "<br> Amigos : ". $r->user_id1;
                          echo "<br> Amigos : ". $r->user_id2;

                        return $this->getPostByStudentId($r->user_id1,$r->user_id2);


                    }
                }


             }



function getPostByStudentId($student_id1,$student_id2){
             $this->db->where('user_id',$student_id1);
             $this->db->where('user_id',$student_id2);
             $this->db->order_by('post_id','desc');
             $sql = $this->db->get('posts');
             if($sql->num_rows() > 0){

                 return $sql->result();
             }

         }

提前谢谢。

这不是个好主意。随着数据库的增长,性能会越来越慢,因为在需要跨多个表进行搜索时,索引速度会越来越慢

例如,如果你最终需要获取大量的用户信息,你需要一份关于你有多少用户以及他们的电子邮件地址的报告,那么突然之间,你将大量的表连接到一起,或者进行数百次查询

最好将所有内容保存在较少的表中,并将数据逻辑地保存在一起,而不是将用户逻辑地保存在一起

这看起来很诱人,但数据库设计很差

您需要了解数据库规范化。
问题在于Friends表的交互性质。如果Bob UserID1是Jim UserID2的朋友,那么您是否还应该拥有JimUserID1是BobUserID2的朋友的其他记录。现在您有两条记录,但至少不必从两个字段中选择distinct


我将重构数据库并替换friends表为frendship表,删除userID,然后创建一个user\u友谊桥接表,其中包含userID和FrienshipID。然后,您只需要查询桥接表就可以找到单个用户的所有友谊。

大多数数据库都限制了它可以是多少个表。为什么要这样做?没有明显的优势。非常糟糕的做法,规范化你的数据。这是一个很难问的问题,因为它涉及到意见。@Lashane这是一个大学的项目,所以它将是每个学生的表格。我知道这听起来很糟糕,哈哈。但我感觉有点累了,这似乎是一个更简单的解决方案。对,它起作用了,我使用了一个连接查询并连接了3个表。现在,我只需要将登录查询的用户也包括在内。非常感谢你的帮助D