sql >> Databáze >  >> RDS >> Mysql

Vícenásobné vyhledávání ID MySQL

MySQL nemůže indexovat pohledy, takže to, co chcete, je v MySQL nemožné .

Můžete použít externí fulltextový indexovací stroj jako Sphinx a načíst tam data pomocí dotazu s JOINS

Případně můžete vytvořit denormalizovanou tabulku:

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

a vyplňte jej tímto dotazem:

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 

včas.

Vlastně, pokud jsou všechny vaše tabulky MyISAM , můžete na spojení použít fulltextové vyhledávací dotazy (v booleovském režimu), aniž byste museli vytvářet fulltextový index.

Řekněme, že hledáte '+Jones +math +physics' , kde Jones je příjmení učitele a math a physics jsou předměty, můžete provést tento dotaz:

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') použije FULLTEXT index na teacher , jestli nějaký; druhý MATCH bude výsledky jemně filtrovat.

Dotazy zahrnující OR podmínky nebo třídění podle relevance jsou však složitější.




  1. Databázový model pro rezervační systém autoškoly. Část 1

  2. django.db.utils.OperationalError:nelze se připojit k serveru:Žádný takový soubor nebo adresář

  3. Omezení počtu neúspěšných pokusů o přihlášení

  4. Jak importuji soubor .sql do databáze mysql pomocí PHP?