首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >有没有可能找到表mysql中匹配的字段?

问有没有可能找到表mysql中匹配的字段?
EN

Stack Overflow用户
提问于 2012-10-11 05:08:17
回答 2查看 72关注 0票数 0

我在找表格中的重复项。需要检查是否重复的字段是来自PHP的序列化数组。这是我的问题:

代码语言:javascript
复制
SELECT Blob, BID, ID
FROM  `Statuses`
WHERE ID <> :id AND (Blob LIKE :blob1 OR Blob LIKE :blob2)

现在,我希望从这个查询中选择所有那些不是im试图匹配的状态的状态,并且它们的序列化数组包含:blob1或序列化数组包含:blob2。

这行得通,它会很好地返回副本,但我需要知道它匹配的是哪一个,是匹配blob1还是匹配blob2。有没有可能不使用PHP直接从查询中做这件事呢?

换句话说,有没有可能找出哪个字段匹配以找到重复项。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-10-11 05:10:59

这应该是可行的:

代码语言:javascript
复制
SELECT Blob, 
       BID, 
       ID,
       case 
          when blob like :blob1 then 0 
          when blob like :blob2 then 1
          else -1 
       end as matching_blob
FROM  Statuses
WHERE ID <> :id 
AND (Blob LIKE :blob1 OR Blob LIKE :blob2)

尽管这意味着对blob进行两次比较(一次针对CASE,一次针对WHERE子句)。我不知道这需要多少开销。

下面是一个SQLFiddle示例(尽管没有使用blobs或变量):http://sqlfiddle.com/#!2/3fc41/6

票数 2
EN

Stack Overflow用户

发布于 2012-10-11 05:11:56

代码语言:javascript
复制
SELECT Blob, BID, ID, IF(Blob LIKE :blob1, 'Matched BLOB1', ''), IF(Blob LIKE :blob2, 'Matched BLOB2', '')
FROM  `Statuses`
WHERE ID <> :id AND (Blob LIKE :blob1 OR Blob LIKE :blob2);

不要担心性能,优化器应该可以处理这个问题。(在select子句中,您正在对较小的结果集执行此操作)

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

https://stackoverflow.com/questions/12828357

复制
相关文章

相似问题

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