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

Zapytanie MySQL dla nazwy rozdzielanej przecinkami

Tak, jeśli istnieje możliwość, możesz umieścić oba last, first i first last do bazy danych, lepszym sposobem jest prawidłowe zaprojektowanie schematu.

Jeśli kiedykolwiek próbujesz wyszukiwać lub w inny sposób manipulować częściami kolumn, twój schemat jest prawie na pewno uszkodzony. Prawie na pewno zabije wydajność.

Prawidłowym sposobem jest posiadanie tabeli w następujący sposób:

T1  FirstName  LastName
==  =========  ========
 1  Pax        Diablo
 2  Bob        Smith
 3  George     Jones

Wtedy możesz wydajniej podzielić nazwę wprowadzoną przez użytkownika (raz, przed uruchomieniem zapytania), zamiast próbować dzielić każdą nazwę w bazie danych.

W przypadku, gdy baza danych zawsze trzyma last, first , może nie być konieczne do zmiany schematu.

Problem, który masz w tym przypadku, polega po prostu na interpretacji tego, co wprowadził użytkownik.

Jedną z możliwości, chociaż jest to zabójcza wydajności, jest zrobienie like dla każdego oddzielnego słowa. Tak więc, jeśli użytkownik wpisał pax diablo , wynikowe zapytanie może wyglądać tak:

select T1 from mytable
    where T2 like '%pax%'
      and T2 like '%diablo%'

W ten sposób nie przejmujesz się tak bardzo zamówieniem.

Jednak biorąc pod uwagę moją niechęć do powolnych zapytań, staram się tego unikać, chyba że jest to absolutnie konieczne (lub Twoja baza danych jest stosunkowo mała i prawdopodobnie tak pozostanie).

Istnieje wiele sposobów na przyspieszenie tego rodzaju zapytań, na przykład:

  • wykorzystując wszelkie możliwości wyszukiwania pełnotekstowego, jakie posiada Twój DBMS.
  • emulowanie takich zdolności przez wyodrębnianie i przechowywanie słów podczas wyzwalaczy wstawiania/aktualizacji (i usuwanie ich podczas wyzwalaczy usuwania).
  • ten poprzedni przypadek, ale także zapewnienie dodatkowych kolumn używanych z wartościami pisanymi małymi literami w bieżącej kolumnie (dla szybkości).
  • informowanie użytkownika, że ​​musi użyć last, first formularz do wyszukiwania.
  • próbuję uniknąć %something% szukaj ciąg jak najwięcej (z something% , indeksy mogą być nadal używane).
  • moja wcześniej wspomniana metoda „podziel nazwę na dwie kolumny”.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Zwróć ranking z wielu tabel za pomocą mySQL

  2. Mysql:Wybierz wiersze z tabeli, których nie ma w innej

  3. Highchart- Używanie PHP, MYSQL i jQuery.get do analizowania danych

  4. jak zapisać związek małżeński w bazie danych

  5. Nie można wyświetlić obrazu BLOB z identyfikatorem URI danych