我在找表格中的重复项。需要检查是否重复的字段是来自PHP的序列化数组。这是我的问题:
SELECT Blob, BID, ID
FROM `Statuses`
WHERE ID <> :id AND (Blob LIKE :blob1 OR Blob LIKE :blob2)现在,我希望从这个查询中选择所有那些不是im试图匹配的状态的状态,并且它们的序列化数组包含:blob1或序列化数组包含:blob2。
这行得通,它会很好地返回副本,但我需要知道它匹配的是哪一个,是匹配blob1还是匹配blob2。有没有可能不使用PHP直接从查询中做这件事呢?
换句话说,有没有可能找出哪个字段匹配以找到重复项。
发布于 2012-10-11 05:10:59
这应该是可行的:
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
发布于 2012-10-11 05:11:56
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子句中,您正在对较小的结果集执行此操作)
https://stackoverflow.com/questions/12828357
复制相似问题