我有两个表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);
答案 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可能与您的设置不同。