Несколько OR в одном sql запросе

310
10 сентября 2017, 02:21

Делаю форму поиска по нескольким полям. Т.е. каждое поле должно искать результ из соответствующей колонки в базе. Как сформулировать этот запрос? Полей 6, не всегда они заполнены, для этого и использую OR.

Answer 1

Была когда-то, такая проблема, то есть были поля которые не факт что заполнены, я решил ее, фильтрацией данных до запроса, вот моя реализация, она на RedBean, но там все интуитивно. https://pastebin.com/xiWVTgNV

<?php
public function objects($dataPG)
{
    $query = "SELECT * FROM `the_property` WHERE `addr` <> ' '";
    $ltr_binds = array();
    foreach( $dataPG as $k => $v )
    {
        if( !empty(trim($v)) && $v != ',' )
        {
            if( !in_array($k, array('start', 'last', 'go', 'all')) )
            {
                if( $k == 'price' )
                {
                    list($start, $last) = explode(',', $v);
                    if( !empty(trim($start)) )
                    {
                        $query .= ' AND `'.$k.'` >= ?';
                        $ltr_binds[] = $start;
                    }
                    if( !empty(trim($last)) )
                    {
                        $query .= ' AND `'.$k.'` <= ?';
                        $ltr_binds[] = $last;
                    }
                } else
                {
                    $query .= ' AND `'.$k.'` = ?';
                    $ltr_binds[] = $v;
                }
            }
        }
    }
    // prepare & query
    $pq = $this->pdo->prepare($query);
    $pq->execute( $ltr_binds );
    return $pq->fetchAll(PDO::FETCH_ASSOC);
}
READ ALSO
Парсинг - решение проблемы

Парсинг - решение проблемы

ЗдравствуйтеСтоит парсер Авито на серваке

264
Зачеркнуть текст у Телеграм бота

Зачеркнуть текст у Телеграм бота

Пишу бота на phpВстал вопрос о перечеркивании слов выводимых ботом

283
Запрос на выборку из нескольких таблиц SQL

Запрос на выборку из нескольких таблиц SQL

Eсть два поста Post121 и Post122, которые относится к категории Test1 подкатегории Test12

242