繁体   English   中英

跨多个列搜索数据库

[英]Search database across multiple columns

我正在使用此查询在我的数据库中搜索三列中的值。 在我输入值跨越多个列的查询之前,这种方法非常有效。

因此,例如,如果我要输入名称和公司“ John McDonalds”,结果将返回空白。 有没有一种方法可以允许同时搜索多个列?

if (isset($_POST['search']) && $_POST['search'] != '') {

        $stmt = $conn->prepare("SELECT * FROM tickets_info WHERE (name LIKE CONCAT('%', ?, '%')) OR (company LIKE CONCAT('%', ?, '%')) OR (ticket LIKE CONCAT('%', ?, '%'))");
        $stmt->bind_param('sss', $_POST['search'], $_POST['search'], $_POST['search']);
        $stmt->execute();

        $result = $stmt->get_result();
        $result_array = array();

        while ($row = $result->fetch_assoc()) {

            array_push($result_array, $row);

        }

        $stmt->close();

        header("Content-Type: application/json");

        echo json_encode($result_array);

    }

当您要搜索多个术语时,一种选择是拆分传入的$_POST['search'] ,然后多次搜索数据库。 这意味着您的搜索算法复杂度乘以n(字数)。

if (isset($_POST['search']) && $_POST['search'] != '') {
    $search_terms = explode( ' ', $_POST['search'] );
    $results = array();
    foreach( $search_terms as $search_term ) {
        array_push( $results, search_db( $search_term ) );
    }

    header("Content-Type: application/json");
    echo json_encode($result_array);
}

function search_db( $search_term ) {
    global $conn;

    $stmt = $conn->prepare("SELECT * FROM tickets_info WHERE (name LIKE CONCAT('%', ?, '%')) OR (company LIKE CONCAT('%', ?, '%')) OR (ticket LIKE CONCAT('%', ?, '%'))");
    $stmt->bind_param('sss', search_term, search_term, search_term );
    $stmt->execute();

    $result = $stmt->get_result();
    $result_array = array();
    while ($row = $result->fetch_assoc()) {
        array_push($result_array, $row);
    }
    $stmt->close();

    return $result_array;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM