sql >> Database >  >> RDS >> Mysql

MySQL meerdere ID-zoekopdrachten

MySQL kan geen weergaven indexeren, dus wat je wilt is onmogelijk in MySQL .

U kunt een externe fulltext-indexeringsengine zoals Sphinx gebruiken en daar gegevens laden met behulp van een query met JOINS

U kunt ook een gedenormaliseerde tabel maken:

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

en vul het met deze vraag:

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 

op tijd.

Eigenlijk, als al uw tabellen MyISAM zijn , kunt u zoekopdrachten met volledige tekst (in booleaanse modus) toepassen op een join, zonder dat u een volledige tekstindex hoeft te maken.

Zeg, als je zoekt naar '+Jones +math +physics' , waar Jones is de achternaam van een leraar en math en physics onderwerpen zijn, kunt u deze zoekopdracht uitvoeren:

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)

De MATCH(teacherBiography) AGAINST ('+Jones') zal een FULLTEXT . gebruiken index op teacher , indien van toepassing; de tweede MATCH zal de resultaten fijnfilteren.

Vragen met betrekking tot de OR voorwaarden of het sorteren op relevantie zijn echter complexer.




  1. Uitvoeringsvolgorde van voorwaarden in SQL 'where'-clausule

  2. Hoe meerdere kolommen als één te combineren en op te maken met aangepaste tekenreeksen?

  3. Ernstige accenten in plaats van '' in mysqli_query

  4. Wanneer moet ik puntkomma's gebruiken in SQL Server?