【问题标题】:Querying comma separated field?查询逗号分隔的字段?
【发布时间】:2015-09-03 10:16:36
【问题描述】:

我正在尝试基于逗号分隔的字段输出选择下拉选项,例如,如果为用户分配了 ID 1 和 2,那么我想输出 ID 为 1 和 2 的位置:

用户表: id(等于 1)和 usergrouplocid,它是一个带有 (1,2) 的文本字段

位置表: id which auto_increment 和 loc_id 请参见下面的 iamge:

我的查询如下:

$query = "SELECT room_location.*, client_room.*, users.* FROM room_location INNER JOIN client_room ON room_location.user_loc_id = client_room.id INNER JOIN users ON room_location.user_loc_id = users.userGroupLocID WHERE 1 IN (userGroupLocID) ORDER BY room_location.location";

上面的查询工作正常,但它只输出 1 的 id 存在于 usergrouplocid 中的位置,那么我如何获取查询以查找 1、2、3 或 4 等是否在 usergrouplocid 中。

【问题讨论】:

  • 老实说,我真的建议规范化您的数据库表以将 CSV 字符串列删除到链接表中。
  • 强烈建议重新设计您的数据库。您可以使用多对多关系。将来可能会给您带来很多错误。
  • 非常感谢 cmets,我会重新考虑这个并重新设计数据库。

标签: php mysql


【解决方案1】:

以防万一您现在确实需要在不重新设计数据库的情况下对其进行排序(我会这样做)...

$ids = array(1,2,4);

$query = "SELECT room_location.*, client_room.*, users.* FROM room_location INNER JOIN client_room ON room_location.user_loc_id = client_room.id INNER JOIN users ON room_location.user_loc_id = users.userGroupLocID WHERE userGroupLocID REGEXP '(^|,)(".implode('|',$ids).")(,|$)' ORDER BY room_location.location";

【讨论】:

  • 是的,但这也将匹配 12,42 等。
  • @jensgram 那里,已修复
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-08-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多