Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

mysql muốn khớp từ hoàn chỉnh hoặc đầu từ trên chuỗi

Như đã nêu trong câu hỏi, truy vấn

$query = 'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE "' . $searchText . '%"'
                                . 'OR SEARCHFIELD LIKE "% ' . $searchText . '%"'

hoạt động để đối sánh các bản ghi trong đó SEARCHFIELD chứa một từ bắt đầu bằng (hoặc bằng) $searchText

Về hiệu suất, tôi đã thực hiện một bài kiểm tra trên máy phát triển của mình MBP 2,2 GHz i7 quad core :

Tìm kiếm một từ trên 4.000 bản ghi mất khoảng 40 mili giây.

Các bản ghi thường được lập chỉ mục (không có văn bản đầy đủ).

Tôi có vài nghìn bản ghi và truy vấn không chạy thường xuyên nên đối với tôi là tốt.
Giải pháp có thể không phù hợp với các ngữ cảnh khác.

Để tạo một câu lệnh đã chuẩn bị sẵn với truy vấn trên, tôi đã sử dụng kỹ thuật được mô tả ở đây:

Thoát thẻ hoang dã MySQL

Mã kết quả như sau:

Hàm
function like($s, $e)
{
    return str_replace(array($e, '_', '%'), array($e . $e, $e . '_', $e . '%'), $s);
}

/* ... */

/* create a prepared statement */
$stmt = $mysqli->prepare(
    'SELECT * FROM MYTABLE WHERE SEARCHFIELD LIKE ? ESCAPE "=" OR SEARCHFIELD LIKE ? ESCAPE "="'
); 

if( $stmt )
{
    /* escape the text */
    $escSearchText = like( $searchText, "=" );

    /* 'like' parameters */
    $like1 = $escSearchText . "%";
    $like2 = "%" . $escSearchText . "%";

    /* bind parameters for markers */
    $stmt->bind_param( "ss", $like1, $like2 );

/* ... */


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Đủ điều kiện cho một tên cột bảng tạm thời trong jOOQ

  2. MySQL so với MariaDB

  3. Làm cách nào để mã hóa mật khẩu này bằng MD5 bằng PHP?

  4. Làm cách nào để xuất tệp csv sang máy tính của tôi trong mysql

  5. Truy vấn tổng Mysql trả về kết quả không chính xác khi sử dụng nhiều phép nối