我正在尝试查找表中的重复项。需要检查重复项的字段是 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/