2016-06-10 29 views
0

我试图得到一个结果,其中一列ID就像是一个逗号分隔栏,我的两个表如下:使用单个id列查询逗号分隔的列?

地点表

enter image description here

事件表

enter image description here

用户表

enter image description here

我的查询是

$sql=" SELECT users.*, events.*, room_location.* 
     FROM events 
      INNER JOIN room_location ON events.event_room = room_location.location 
      INNER JOIN users ON room_location.user_loc_id = users.userlocationaccess 
     WHERE room_location.user_loc_id LIKE '%1,2%'"; 

$result = $conn->query($sql); 

,如果我在用户 - > userGroupLocID使用单标识在上面的查询工作。

如何修改我的查询工作,以便查找ID是否像我的逗号分隔的列?

+1

_Smells像原始数据库design_做如果它不是太晚,更改数据库设计一个严重的错误。这一个只会给你带来问题。在表格列中用逗号分隔的列表存储信息从来没有好的理由 – RiggsFolly

+0

是的,我希望我可以重建数据库,这是客户端如何设置数据库,我必须处理它,因为它们是存储了一千条记录。 – Craig

+1

@克雷格:你可以建议客户改变它。 –

回答

2

您可以使用FIND_IN_SET(str,strlist)函数搜索CSV字段。

mysql> SELECT FIND_IN_SET('b','a,b,c,d'); 
    -> 2 

文档说

如果字符串str是在由N的 字符串列表strlist返回的1到N的范围内的值子。字符串列表是一个 字符串,由以“,”字符分隔的子字符串组成。

您可以通过用户的位置ID列中找到userGroupLocID

select find_in_set(location_id_in_search, replace(userGroupLocID, ' ', '')) 
    from table_name;