向多个用户mysql显示一个组项目

时间:2016-06-17 16:40:03

标签: php sql mysqli

我有两个表group_table,其中存储了所有组信息。

我有一个group_person_table,其中所有id都与组相关

我只想将组信息显示给多个用户(如果他们在group_person_table中匹配

数据库如下所示:

Group_table person_id,group_id,groupname,groupdesc。

Group_person_table person_group_id,group_id,person_id

目前我只有以下查询:

"SELECT * FROM group_table WHERE person_id = $person_id" IN (SELECT person_id FROM group_person_table WHERE person_id =$person_id);

我目前能够向所有用户显示所有组,但我只想将组显示给用户,如果他们在group_person_table中是相同的,那么用户A和B都在A组中,所以他们都看到A组,如果用户A在B组,则用户B不会看到B组!

我正在显示调用OOP中的数据

  

public function get_project($ person_id){                                     // $ sql3 =“SELECT * FROM group_table WHERE person_id = $ person_id”;                           $ sql3 =“SELECT * FROM group_table WHERE person_id = $ person_id”;                                     $ results = mysqli_query($ this-> db,$ sql3);

2 个答案:

答案 0 :(得分:0)

在表之间创建关系时,一个非常重要的事情是决定将用于链接它们的外键保存在何处。拥有组表中的个人表的外键会将该组限制为仅一个人,这显然是您不想要的。因此,您可以从group_table中删除该列,并仅使用group_person_table来表示用户和组之间的关系。

调整之后,您最好的选择是内连接,因为嵌套的select语句在处理大型数据集时确实会减慢速度。而且你想习惯使用更好的方法:)。

您的查询将是:

"SELECT * FROM group_table 
 JOIN group_person_table ON group_table.group_id = group_person_table.group_id 
 WHERE group_person_table.person_id = {$person_id}"

答案 1 :(得分:-1)

以下语法中有错误

"SELECT * FROM group_table WHERE person_id = $person_id" IN (SELECT person_id FROM group_person_table WHERE person_id =$person_id);

尝试更改您的查询

SELECT * FROM group_table WHERE person_id IN (SELECT person_id FROM group_person_table WHERE person_id =:person_id);

使用:person_id

mysqli是绑定参数的位置

由于您尚未发布任何实际的PHP代码或数据库架构(请提供一个以更好地回答这个问题),因此fiddle可能与您的设置不同。