给定我不确定存储的值是序列化数组还是简单整数的情况,在应用正确条件之前是否有办法检查?我举一个例子:
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;"
条件。有办法实现这一目标吗?
P.S-英语不是我的母语,所以我希望我能使自己清晰。
您的病情错误,您应该使用AND
,而不是OR
。
SELECT * FROM table
WHERE prefs NOT LIKE ":value;" AND prefs != "value"
,由于有场景(s)您的prefs是使用通配符的序列化数据,可以解决
prefs NOT LIKE CONCAT("%", ":value;", "%")
您的将看起来像这样
SELECT * FROM table where prefs NOT LIKE CONCAT("%", ":value;", "%") AND prefs != "value"