2016-12-26 7 views
0

格納された値がシリアル化された配列か単純な整数かどうかわからない状況がある場合、正しい条件を適用する前にチェックする方法がありますか?私は例をあげる:MySQLの動的条件は列の値で指定しますか?

SELECT * FROM table WHERE prefs NOT LIKE ":value;" OR prefs != "value"

最初の条件ルールアウトシリアライズさ:

user_id | prefs 
---------------- 
1  | 1 
2  | {serialized_php_array} 

は今、私は具体的な値はので、私のようなので、何かをする必要がありprefsではありませんどこをチェックしたいです配列の値を返し、第2の条件は単純な整数を除外します。

問題は同じ条件では共存できないため、値がシリアライズされてから"NOT LIKE :value;"の条件が満たされた場合にMySQLに問い合わせる必要があるということです。それを達成する方法はありますか?

P.S - 英語は母国語ではないので、私は自分自身を明確にしたいと思う。

+0

あなたの現在の方法のようになるはずです'prefs'カラムのシリアル化されたデータは良いものではありませんが、現在のクエリは実際に動作するはずです。サンプルデータと期待される出力を表示できますか? –

+0

あなたは 'OR'ではなく' AND'を使うべきです。 – Barmar

+0

IN句を使って試してみましたか? –

答えて

2

条件が間違っている場合は、ではなくANDを使用する必要があります。OR

SELECT * FROM table 
WHERE prefs NOT LIKE ":value;" AND prefs != "value" 
0

シナリオ(s)はあなたのprefsがありますので、ワイルドカードを使用してシリアル化されたデータは解決するだろう、それ

prefs NOT LIKE CONCAT("%", ":value;", "%") 

あなたの保存のこの

SELECT * FROM table where prefs NOT LIKE CONCAT("%", ":value;", "%") AND prefs != "value" 
関連する問題