首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Mysql LIKE子句find 1 and not 11

Mysql LIKE子句find 1 and not 11
EN

Stack Overflow用户
提问于 2012-11-06 23:16:40
回答 4查看 931关注 0票数 1

首先,我想说,如果这个问题已经被问过了,我很抱歉(当时还没有找到它)。

我的问题是,我在mysql中有一个LIKE子句,其中我必须在逗号分隔的行中查找一些数字。(是的,我知道使用逗号分隔的行不是一件好事,但我不是设计数据库结构的人)。

因此,我有以下几点:

代码语言:javascript
复制
  SELECT pfd.*, pu.username, pu.user_email 
  FROM phpbb_profile_fields_data pfd
  LEFT JOIN phpbb_users pu ON pfd.user_id=pu.user_id 
  WHERE pfd.pf_pf_produktionsteknik LIKE '%" . ($id) . "%' 
      AND pu.user_type!=1 AND pfd.pf_status=2";

但这里的问题是,它返回LIKE等于1的地方(这是应该的),但也返回11 (不应该是这样)。

我试过在不能工作的情况下使用field_in_set,现在我不知道该怎么做。

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2012-11-06 23:22:48

如果您的列表是逗号分隔的,您是否可以先查找数字,然后查找逗号,或者查找逗号,然后查找数字,或者查找等于数字本身。这应该涵盖所有情况,包括单个数字实例。

票数 1
EN

Stack Overflow用户

发布于 2012-11-06 23:43:41

当位于列表开头时,搜索的值可以用逗号包含;当位于列表末尾时,可以用逗号跟随;当位于列表末尾时,或者它是唯一的值(列表中没有逗号)

代码语言:javascript
复制
WHERE (pfd.pf_pf_produktionsteknik LIKE '%," . ($id) . ",%' 
    OR pfd.pf_pf_produktionsteknik LIKE '"($id) . ",%'    
    OR pfd.pf_pf_produktionsteknik LIKE '%," .($id) . "'    
    OR pfd.pf_pf_produktionsteknik = '" .($id) . "'    )  AND ...
票数 1
EN

Stack Overflow用户

发布于 2012-11-06 23:27:08

您正在处理的数据结构很差,所以您需要解决这个问题--逗号分隔的数字集不在1nf中,这是非常基本的。

现在我已经解决了这个问题,您可以尝试使用regexp而不是LIKE:

作为SQL (请注意值1):

代码语言:javascript
复制
WHERE pfd.pf_pf_produktionsteknik REGEXP '\b1\b'

或PHP字符串形式:

代码语言:javascript
复制
..." WHERE pfd.pf_pf_produktionsteknik REGEXP '\b" . $id . "\b'"

边界将匹配1而不是11:\b是"word ...which“的正则表达式,这意味着它需要字符串或标点符号的开头,或者值$id两侧的空格。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13253980

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档