1

I have the problem that my client is using a theme which stores options of items in a serialized way in the post_meta table.

I already found out that this is not the best way to save values especially if you want to query over them later, but so far I cannot change that fact.

I tried to query it with the REGEXP compare option of the meta_query() function.

$metaquery['meta_query'] = array(
    'key' => '_ait-dir-item',
    'value' => '*\"guestcount\";s:[0-9]+:\"'.$_GET['guestcount'].'\".*',
    'compare' => 'REGEXP'
);
$query->set('meta_query',$metaquery);

So I can find the items with the exact geustcount of the user's input.

But I would like to find all items with guestcount >= input.

How would that be possible?

UPDATE

I have tried it now with checking the number for a range with regex (while the regex is beeing created before)

$gc = (string)$_GET['guestcount']; //gc...guestcount
$input_regex = $gc[0];

for($i=1;$i<strlen($gc); $i++){
    $input_regex .= "[".$gc[$i]."-9]";
}
$compare_regex = '|[2-9][0-9]{2}|[1-9][0-9]{3}|1[0-9]{4}|20000';

the max value of the range is always 20.000.

Well ... I dont get any results with this... can anybody see a bug in it?

This was for the input = 150:

'value' => '*\"guestcount\";s:[0-9]+:\"\b(1|[5-9][0-9]{2}|[1-9][0-9]{3}|1[0-9]{4}|20000)\b\".*'

Update

I cleaned up the regex and removed th \b and the . and * and stuff... now it seems, that I find alle items, where a guestcount is entered ... i.e. input=300 I also found one with 250 guestcount...

'value' => '\"guestcount\";s:[0-9]+:\"(1|[5-9][0-9]{2}|[1-9][0-9]{3}|1[0-9]{4}|20000)\"'

4
  • heureka. I solved it. The thing was, that the "constant" part, was not that constant. In the $compare regex, I also had to use the first $gc[0]+1 value (exception for 9). Shell I post it as an answer?
    – helle
    Commented Dec 16, 2014 at 10:07
  • 1
    Great, please add it as an answer ;-) .. and maybe explain how you make sure that the generated regex gives guestcount >= input.
    – birgire
    Commented Dec 16, 2014 at 10:13
  • Agree with @birgire post it as an answer. While I'm at it, I think that your answer is still relevant birgire. Commented Dec 16, 2014 at 14:16
  • didnt have time so far ... but i will soon post it
    – helle
    Commented Dec 22, 2014 at 20:18

0

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Browse other questions tagged or ask your own question.