Mysql
 sql >> база данни >  >> RDS >> Mysql

Търсене на множество идентификатори в MySQL

MySQL не може да индексира изгледи, така че това, което искате, е невъзможно в MySQL .

Можете да използвате външен механизъм за индексиране на пълен текст като Sphinx и да зареждате данни там, като използвате заявка с JOINS

Като алтернатива можете да създадете денормализирана таблица:

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

и го попълнете с тази заявка:

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 

своевременно.

Всъщност, ако всичките ви таблици са MyISAM , можете да приложите заявки за търсене в пълен текст (в булев режим) към съединение, без да се налага да създавате индекс в пълен текст.

Кажете, ако търсите '+Jones +math +physics' , където Jones е фамилията на учителя и math и physics са теми, можете да направите тази заявка:

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') ще използва FULLTEXT индекс на teacher , Ако някой; второто MATCH ще филтрира фино резултатите.

Заявки, включващи OR условията или сортирането по уместност обаче са по-сложни.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Създаване на Pivot таблица за посещаемост с помощта на php и mysql

  2. ИЗБЕРЕТЕ най-новия запис с ненулева стойност в една колона

  3. MySQL:Как да получа промените от последната актуализация

  4. Кой е най-добрият начин да вмъкнете само месец, ден и час в таблицата на базата данни?

  5. Как да вмъкнете списък <Продукти> в база данни