首先,我想说,如果这个问题已经被问过了,我很抱歉(当时还没有找到它)。
我的问题是,我在mysql中有一个LIKE子句,其中我必须在逗号分隔的行中查找一些数字。(是的,我知道使用逗号分隔的行不是一件好事,但我不是设计数据库结构的人)。
因此,我有以下几点:
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,现在我不知道该怎么做。
发布于 2012-11-06 23:22:48
如果您的列表是逗号分隔的,您是否可以先查找数字,然后查找逗号,或者查找逗号,然后查找数字,或者查找等于数字本身。这应该涵盖所有情况,包括单个数字实例。
发布于 2012-11-06 23:43:41
当位于列表开头时,搜索的值可以用逗号包含;当位于列表末尾时,可以用逗号跟随;当位于列表末尾时,或者它是唯一的值(列表中没有逗号)
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 ...发布于 2012-11-06 23:27:08
您正在处理的数据结构很差,所以您需要解决这个问题--逗号分隔的数字集不在1nf中,这是非常基本的。
现在我已经解决了这个问题,您可以尝试使用regexp而不是LIKE:
作为SQL (请注意值1):
WHERE pfd.pf_pf_produktionsteknik REGEXP '\b1\b'或PHP字符串形式:
..." WHERE pfd.pf_pf_produktionsteknik REGEXP '\b" . $id . "\b'"边界将匹配1而不是11:\b是"word ...which“的正则表达式,这意味着它需要字符串或标点符号的开头,或者值$id两侧的空格。
https://stackoverflow.com/questions/13253980
复制相似问题