感谢您花时间阅读我的帖子。
我有2个表的用户和配置。
用户表为几个字段: id,client_id,site_id,用户名,电子邮件,密码 从用户表中,我获得了具有通过$ _SESSION传递的特定客户端ID的所有用户,并且工作正常,我从特定的client_id中获取了所有用户
SELECT * FROM users WHERE client_id = '".$_SESSION['c_id']."'
这将返回示例,其中包含2个用户:
++id++ ++client_id++ ++site_id++ ++username++ ++email++ ++password++
1 1 1,2 test1 1@1.com pass
2 1 1 test2 2@1.com pass
从配置表中,我需要通过从用户传递的site_id以及通过指定元(s_name)的名称字段来获取元(站点名称逗号分隔)。该表的预期结果是1行中的meta,可以使用concat()。 配置表为几个字段:
++id++ ++client_id++ ++site_id++ ++name++ ++meta++
1 1 1 s_name Site 1 Name
2 1 2 s_name Site 2 Name
最终结果将是用户表,将site_id替换为用逗号分隔的配置表元字段
++id++ ++client_id++ ++site_id++ ++username++ ++email++ ++password++
1 1 Site 1 name, test1 1@1.com pass
Site 2 Name
2 1 Site 1 name test2 2@1.com pass
建议,我应该使用1个复杂的mysqli查询还是2个带有2个循环的查询?
到目前为止,我尝试使用2个查询,但是我无法获得第二个查询来连接以逗号分隔的站点名称:
$client_id_query = "SELECT * FROM user WHERE client_id = '".$_SESSION['c']."'";
$client_id_result = mysqli_query($hotelconnection->hotelconn,$client_id_query);
if(mysqli_num_rows($client_id_result) > 0){
while ($row_client_id = mysqli_fetch_array($client_id_result) ){
$explode_user_site_id = $row_client_id['site_id'];
$explode_user_site_id = explode(',', $explode_user_site_id);
foreach($explode_user_site_id as $unique_id){
$site_name_query = "SELECT GROUP_CONCAT(meta SEPARATOR ',') AS website_name FROM config WHERE name = 'website_name' AND client_id = '".$row_client_id['client_id']."' AND site_id = '".$unique_id."'";
$site_name_result = mysqli_query($hotelconnection->hotelconn,$site_name_query);
if(mysqli_num_rows($site_name_result) > 0){
while ($row_site_name = mysqli_fetch_array($site_name_result) ){
// Result is not concated in 1 row
++id++ ++client_id++ ++site_id++ ++username++ ++email++ ++password++
1 1 Site 1 name test1 1@1.com pass
1 1 Site 2 Name test1 1@1.com pass
2 1 Site 1 name test2 2@1.com pass
}
}
}
}
}
答案 0 :(得分:0)
可能不是最有效的解决方案,但可以起作用。 删除每个站点的site_id会创建3个总循环,并使config循环FIND_IN_SET side_ids导致每个用户只有一行,以逗号分隔站点名称。
$site_name_query = SELECT GROUP_CONCAT(meta SEPARATOR ', ') AS website_name FROM config WHERE name = 'website_name' AND client_id = '".$row_client_id['client_id']."' AND FIND_IN_SET(site_id, '".$row_client_id['site_id']."')";