Как искать более двух ключевых слов? - PullRequest
0 голосов
/ 05 мая 2019

У меня есть 5 полей с именами first_name, last_name, middle_name, status и barangay_name, я хочу искать данные в зависимости от желания пользователя. Проблема только в том, что последнее поле с именем barangay_name работает нормально. Остальное нет, что не так с моим запросом? Я получаю только активного бенефициара и присоединяюсь к tbl_beneficiary и tbl_barangay.

  public function searchActiveBeneficiary($keyword) {
        $sql = "SELECT tbl_beneficiary.beneficiary_id, 
        tbl_beneficiary.first_name, tbl_beneficiary.last_name, 
        tbl_beneficiary.middle_name, tbl_beneficiary.is_active, 
        tbl_barangay.barangay_name FROM tbl_beneficiary INNER JOIN tbl_barangay 
        ON tbl_barangay.barangay_id = tbl_beneficiary.barangay_id WHERE 
        tbl_beneficiary.is_active = 'Yes' AND tbl_beneficiary.first_name OR 
        tbl_beneficiary.is_active = 'Yes' AND tbl_beneficiary.last_name OR 
        tbl_beneficiary.is_active = 'Yes' AND tbl_beneficiary.middle_name OR 
        tbl_beneficiary.is_active = 'Yes' AND tbl_barangay.barangay_name LIKE 
        :keyword";

        $stmt = $this->connection->prepare($sql);

        $stmt->execute([
            ":keyword" => '%' . $keyword . '%'
        ]);

        return $stmt->fetchAll();
    }

  //vue.js method
  searchActiveBeneficiary : function() {
        axios({
            method : "GET",
            url : this.urlRoot + "beneficiary/search_active_beneficiary.php?keyword=",
            params : {
                keyword : this.search_active_beneficiary
            }
        }).then(function (response){
            vm.active_beneficiaries = response.data;
            console.log(response);
        });
    },

  <?php

    include '../../private/initialize.php';

    $beneficiary = new Beneficiary();

    echo json_encode($beneficiary->searchActiveBeneficiary($_GET['keyword']));

  ?>

1 Ответ

1 голос
/ 05 мая 2019

Это потому, что barangay_name является единственным, который вы фактически сравниваете с ключевым словом. Вам необходимо добавить часть выражения LIKE в каждое из ваших условий. Обратите внимание, что указывать tbl_beneficiary.is_active = 'Yes' более одного раза не нужно, вы можете просто изменить логику вашего условия WHERE, чтобы получить тот же эффект:

WHERE tbl_beneficiary.is_active = 'Yes'
  AND (tbl_beneficiary.first_name LIKE :keyword OR 
       tbl_beneficiary.last_name LIKE :keyword OR 
       tbl_beneficiary.middle_name LIKE :keyword OR 
       tbl_barangay.barangay_name LIKE :keyword)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...