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

Tra cứu nhiều Id MySQL

MySQL không thể lập chỉ mục các chế độ xem nên những gì bạn muốn là không thể trong MySQL .

Bạn có thể sử dụng công cụ lập chỉ mục toàn văn bản bên ngoài như Sphinx và tải dữ liệu ở đó bằng cách sử dụng truy vấn với JOINS

Ngoài ra, bạn có thể tạo một bảng không chuẩn hóa:

CREATE TABLE ftsearch
        (
        teacherId INT PRIMARY KEY,
        teacherBiography TEXT,
        subject1 TEXT,
        subject2 TEXT,
        subject3 TEXT,
        )
ENGINE=MyISAM

và điền vào nó với truy vấn sau:

INSERT
INTO    ftsearch
SELECT  teacherId, teacherBiography,
        s1.name, s2.name, s3.name
FROM    teacherProfile
LEFT JOIN
        subject s1
ON      s1.id = subjectOneId 
LEFT JOIN
        subject s2
ON      s2.id = subjectTwoId 
LEFT JOIN
        subject s3
ON      s3.id = subjectThreeId 

trên cơ sở kịp thời.

Trên thực tế, nếu tất cả các bảng của bạn là MyISAM , bạn có thể áp dụng các truy vấn tìm kiếm toàn văn bản (ở chế độ boolean) cho một phép nối mà không cần phải tạo chỉ mục toàn văn bản.

Giả sử, nếu bạn đang tìm kiếm '+Jones +math +physics' , trong đó Jones là họ của giáo viên và mathphysics là chủ thể, bạn có thể thực hiện truy vấn này:

SELECT  teacherId, teacherBiography,
        s1.name, s2.name, s3.name
FROM    teacherProfile
LEFT JOIN
        subject s1
ON      s1.id = subjectOneId 
LEFT JOIN
        subject s2
ON      s2.id = subjectTwoId 
LEFT JOIN
        subject s3
ON      s3.id = subjectThreeId 
WHERE   MATCH(teacherBiography) AGAINST ('+Jones' IN BOOLEAN MODE)
        AND MATCH(t.teacherBiography, s1.name, s2.name, s3.name) AGAINST ('+Jones +math +physics' IN BOOLEAN MODE)

MATCH(teacherBiography) AGAINST ('+Jones') sẽ sử dụng FULLTEXT lập chỉ mục trên teacher , nếu có; MATCH thứ hai sẽ lọc các kết quả.

Các truy vấn liên quan đến OR Tuy nhiên, việc sắp xếp các điều kiện hoặc mức độ liên quan phức tạp hơn.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. cách lưu dữ liệu từ tệp csv vào cơ sở dữ liệu bằng php

  2. Nhận kết quả trống cho truy vấn 'COUNT' / 'GROUP BY' MySQL

  3. Truy vấn trường được phân tách bằng dấu phẩy?

  4. Cập nhật các hàng trùng lặp với id tìm thấy trùng lặp

  5. Cách thích hợp để kiểm tra mã sử dụng các truy vấn dành riêng cho MySQL trong nội bộ là gì