Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wyszukiwanie wielu identyfikatorów MySQL

MySQL nie można indeksować widoków, więc to, czego chcesz, jest niemożliwe w MySQL .

Możesz użyć zewnętrznego silnika indeksowania pełnotekstowego, takiego jak Sphinx, i załadować tam dane za pomocą zapytania z JOINS

Alternatywnie możesz utworzyć zdenormalizowaną tabelę:

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

i wypełnij je tym zapytaniem:

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 

terminowo.

Właściwie, jeśli wszystkie twoje tabele to MyISAM , możesz zastosować zapytania wyszukiwania pełnotekstowego (w trybie logicznym) do złączenia, bez konieczności tworzenia indeksu pełnotekstowego.

Powiedz, jeśli szukasz '+Jones +math +physics' , gdzie Jones to nazwisko nauczyciela i math i physics to tematy, możesz wykonać to zapytanie:

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') użyje FULLTEXT indeks na teacher , Jeśli w ogóle; drugi MATCH dokładnie przefiltruje wyniki.

Zapytania zawierające OR jednak warunki lub sortowanie według trafności są bardziej złożone.




  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. konfiguracja serwera mysql instalacja nie powiodła się LUB nie można uruchomić usługi

  2. Nie można utworzyć tabeli z przygotowanym oświadczeniem

  3. Jak połączyć wiele baz danych, serwerów w mysql i zapytań z obu tabel?

  4. Jak uzyskać dostęp do mysql poza moim klastrem kubernetes?

  5. Błąd krytyczny:wywołanie niezdefiniowanej metody mysqli_stmt::fetch_array()