2015-11-17 3 views
1

У меня есть столбец таблицы, который содержит строку. Эта строка изменяется по длине в зависимости от количества хранимых в ней переменных, но всегда следует той же схеме. Строка генерируется динамически плагином Wordpress, и я не влияю на то, как он хранится. Вот он:Какой mySQL-оператор использовать при проверке массива переменных в столбце таблицы

a:3:{i:0;s:3:"509";i:1;s:3:"511";i:2;s:3:"514";} 

Пользователь может выбрать любое количество переменных из поля множественного выбора в форме HTML. Я храню их в сессии:

Array ([0] => 511 [1] => 514) 

Сеанс должен содержать хотя бы одно значение, но может содержать больше.

Как я могу найти наличие 511 или 514 и т. Д. (Как хранится в моем массиве сеансов) в столбце таблицы?

Я до сих пор пробовал LIKE, IN и EXISTS, но никто не работает.

Пожалуйста, обратите внимание, что я использую WP_Query (Wordpress), так что только операторы, доступные для меня являются:

'=', '!=', '>', '>=', '<', '<=', 'LIKE', 'NOT LIKE', 'IN', 'NOT IN', 'BETWEEN', 'NOT BETWEEN', 'EXISTS' and 'NOT EXISTS' 

Только в случае, если кто-то нуждается в этом, вот массив WP_Query meta_query Я использую:

array(
        'key' => 'teacher', 
        'value' => $_SESSION['selected_teachers'], 
        'compare' => 'IN' 
       ) 

Большое спасибо заранее!

+0

Это похоже на сериализованный массив php. Если вы так сильно помешали Wordpress, то можно было бы написать функцию MySQL для выполнения проверки, – Kickstart

+0

- это ваш _ $ _ SESSION ['selected_teachers'] _ - строка _a: 3: {i: 0; s: 3: "509", i: 1; s: 3: "511"; i: 2; s: 3: "514";} _ или _Array ([0] => 511 [1] => 514) _? – David

+0

@David: $ _SESSION ['selected_teachers'] - это массив ([0] => 511 [1] => 514) –

ответ

1

попробовать это, чтобы генерировать meta_query в WP_Query в

$meta_queries = array('relation' => 'OR'); 
foreach($_SESSION['selected_teachers'] as $v) {  
    array_push($meta_queries, 
       array(
        'key' => 'teacher',        
        'value' => ':"'.$v.'";',        
        'compare' => 'LIKE'       
    )); 
} 

Это сгенерирует запрос mysql, используя «WHERE ... LIKE% ...%», он будет иметь некоторые проблемы с производительностью.