我在我的数据库中创建了一个用户组和一个用户表,名为test
和user_test
。每个用户都有一个名为groups
的字段,该字段至少包含一个数字,但也可以包含多个数字,例如1,2,3
。用户组表存在id
和group_name
。
我现在一直试图做的是从这个用户被分配到的所有组中获取数据。例如,如果将一个用户分配给组1,2,3
(如数据库中所示),则会打印出具有这些ID的每个组的名称。也许它打印出group 1
group 2
group 3
。
$user_test = $this->mysqli->query("SELECT user_id,groups FROM user_test WHERE user_id = '1'");
while($user_test_fetch = $user_test->fetch_array()) {
$groups = $user_test_fetch["groups"];
}
if(strlen($groups) > 1) { // user has more than 1 group
// ???
} else { // user does not have more than 1 group
$search = "id = '".$groups . "'";
}
$group_data = $this->mysqli->query("SELECT * FROM test WHERE ".$search."");
while($group_data_fetch = $group_data->fetch_array()) {
echo $group_data_fetch["group_name"];
}
或者,如果您有其他任何方式可以执行此任务,请随时向我展示!我只是想学习如何完成这项任务(最好尽可能高效)。
答案 0 :(得分:1)
很简单。
如果它以1,2,3
格式存储。假设一个名为1
且ID为INT
或BIGINT
(否则如果VARCHAR
此查询将减慢)
更改
if(strlen($groups) > 1) { // user has more than 1 group
// ???
} else { // user does not have more than 1 group
$search = "id = '".$groups . "'";
}
到
$search = "id IN (".$groups.");
这一行可用于单个组或一组组,只要它用逗号分隔(因为SQL喜欢逗号)