鉴于我不确定存储的值是序列化数组还是简单整数的情况,有没有办法在应用正确的条件之前进行检查?我举个例子:
user_id | prefs
----------------
1 | 1
2 | {serialized_php_array}
现在我想查看prefs
中没有特定值的位置,所以我需要这样的内容:
SELECT * FROM table WHERE prefs NOT LIKE ":value;" OR prefs != "value"
第一个条件排除了序列化数组值,第二个条件排除了简单整数。
问题是它们不能在相同的条件下共存,我需要询问MySQL是否序列化了值,然后才进行"NOT LIKE :value;"
条件。有没有办法实现这个目标?
答案 0 :(得分:2)
您的情况有误,您应该使用AND
,而不是OR
。
SELECT * FROM table
WHERE prefs NOT LIKE ":value;" AND prefs != "value"
答案 1 :(得分:0)
由于有一些场景,你的prefs是一个使用外卡的序列化数据会解决它
prefs NOT LIKE CONCAT("%", ":value;", "%")
你的意思应该是这样的
SELECT * FROM table where prefs NOT LIKE CONCAT("%", ":value;", "%") AND prefs != "value"