Tauras Tauras - 2 months ago 5
PHP Question

Select from table where field data 'like' variable

The script works just fine, but not as expected.

$table = $_POST['table'];
$field = $_POST['field'];
$condition = $_POST['condition'];
$value = $_POST['value'];

if ($condition == 'Contains') { $newcondition = 'like'; }

$builder = DB::table($table)->where($field, $newcondition, '%'.$value.'%')->get();


For example, my field data looks like this: A, B, C, D

It gives me correct results, if
$value
is in same order: A, B (if value is in original order).

But it does not give results at all, if
$value
is A, D or in different order.

How to make this script to work, if
$value
is not in original order?

Answer

You can split the $value and create a custom whereRaw with AND for each individual value. I would also suggest that you examine whether or not it makes sense to be storing your data the way you have it saved, especially if the query you are making now is one you plan to make often. There might be much more efficient ways to store it.

$values = explode(', ', $value);
$query = "";
foreach($values as $param) {
    $query .= $field.' LIKE %'.$param.' AND' 
}
$query = rtrim($query, " AND");