Определение типа поиска

У меня есть проект в нём я пишу поиск для нахождения контактов, и вообщем есть одна проблема, поиск ведет по коду, телефон, email. Я могу написать sql функцию для поиска через один запрос, но есть ли возможность как определить по какому именно параметру было найдено совпадение, по телефону или email, или коду ?? Просто сейчас у меня сделано 3 запроса, т.к. учитывая по какому параметру было найдено совпадение то мне и надо выводить, т.е. если это телефон то выводу телефоны, email значит email и т.д.

Код поиска выглядит примерно так:

public function searchContactByPhoneCodeEmailOrderId($search) {
    $search_condition = \cArray::stripQuotes([
        'code' => \cString::prepareSearchString($search),
        'email' => \cString::prepareSearchString($search),
        'phone' => $search
    ]);

    $type = 'code';
    $response_contact = cFactory::getDB()->getRows("
        SELECT TOP 15 
            ID_Code, 
            code, 
            ID_Contact
        FROM
            tblCode
        WHERE
            ID_Contact IS NOT NULL
            AND code LIKE '" . $search_condition['code'] . "%'
    ", __FILE__, __LINE__);

    if (empty($response_contact)) {
        $response_contact = cAuthorizationModel::model()->getContactByOldCode($search_condition['code']);
    }

    if (empty($response_contact) && cChecker::phone($search_condition['phone'])) {
        $type = 'phone';
        $response_contact = cFactory::getDB()->getRows("
        SELECT TOP 15 
            ID_Contact, 
            phone
        FROM
            tblContact
        WHERE
            phone LIKE '" . $search_condition['phone'] . "%'
    ", __FILE__, __LINE__);
    }
    ...
}

Ну суть думаю ясна, всю её писать не буду слишком большая получается.


Ответы (1 шт):

Автор решения: Akina

В синтаксисе SQL это может быть, например, так:

    SELECT *, 'phone' AS source
    FROM table
    WHERE LOCATE(@search_string, phone)
UNION ALL
    SELECT *, 'email'
    FROM table
    WHERE LOCATE(@search_string, email)
UNION ALL
    SELECT *, 'code'
    FROM table
    WHERE LOCATE(@search_string, code)
→ Ссылка