php - 是否可以找出mysql表中哪个字段匹配?

标签 php mysql

我正在尝试查找表中的重复项。需要检查重复项的字段是 PHP 的序列化数组。这是我的查询:

SELECT Blob, BID, ID
FROM  `Statuses`
WHERE ID <> :id AND (Blob LIKE :blob1 OR Blob LIKE :blob2)

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

这有效,它返回重复项很好,但我需要知道它匹配哪一个,是匹配 blob1 还是匹配 blob2。是否可以直接从 Query 执行此操作而不使用 PHP?

换句话说,是否可以找出哪个字段匹配来查找重复项。

最佳答案

这应该有效:

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 示例(尽管没有使用 blob 或变量):http://sqlfiddle.com/#!2/3fc41/6

关于php - 是否可以找出mysql表中哪个字段匹配?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12828357/

相关文章:

php - 每次更新到mysql的html表单数组

php - mysql GROUP BY 遇到问题

php - 为什么浏览器将 info.html 的服务器 API 显示为 Apache 2.0 处理程序,而将 info.php 显示为 FPM/FastCGI?

php - iOS 应用程序从服务器获取数据

mysql - 在 SQL 中有效地加入间隔范围

mysql - 在 MySQL 中选择最接近的值

php - 删除图像图标对齐

PHP:将一个类的所有函数包装在一个子类中

php - 从数据库列出产品时的最佳实践是什么

Mysql - 选择到 XML