Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

mySQL MATCH di beberapa tabel

  • Anda tidak dapat menentukan indeks teks lengkap (atau jenis indeks apa pun) di beberapa tabel di MySQL. Setiap definisi indeks merujuk tepat satu tabel. Semua kolom dalam indeks teks lengkap yang diberikan harus dari tabel yang sama.

  • Kolom bernama sebagai argumen ke MATCH() fungsi harus menjadi bagian dari indeks teks lengkap tunggal. Anda tidak dapat menggunakan satu panggilan ke MATCH() untuk mencari semua kolom yang merupakan bagian dari semua indeks teks lengkap di database Anda.

  • Indeks teks lengkap hanya kolom indeks yang ditentukan dengan CHAR , VARCHAR , dan TEXT tipe data.

  • Anda dapat menentukan indeks teks lengkap di setiap tabel.

Contoh:

CREATE TABLE categories (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  FULLTEXT INDEX ftcat (name)
);

CREATE TABLE host_types (
  id SERIAL PRIMARY KEY,
  category_id BIGINT UNSIGNED,
  name VARCHAR(100),
  FULLTEXT INDEX ftht (name)
);

CREATE TABLE hosts (
  id SERIAL PRIMARY KEY,
  host_id BIGINT UNSIGNED,
  category_id BIGINT UNSIGNED,
  name VARCHAR(100),
  FULLTEXT INDEX fthost (name)
);

CREATE TABLE products (
  id SERIAL PRIMARY KEY,
  name VARCHAR(100),
  keywords VARCHAR(100),
  uid VARCHAR(100),
  description VARCHAR(100),
  quantity INTEGER,
  price NUMERIC(9,2),
  host_id BIGINT UNSIGNED,
  FULLTEXT INDEX ftprod (name, keywords, description, uid)
);

Kemudian Anda dapat menulis kueri yang menggunakan masing-masing indeks teks lengkap:

SELECT ...
  MATCH(categories.name) AGAINST('search term') as cscore, 
  MATCH(host_types.name) AGAINST('search term') as htscore,
  MATCH(hosts.name) AGAINST('search term') as hscore,
  MATCH(products.name, products.keywords, products.description, products.uid)
    AGAINST('search term') as score
FROM products
LEFT JOIN hosts ON products.host_id = hosts.id
LEFT JOIN host_types ON hosts.host_id = host_types.id
LEFT JOIN categories ON host_types.category_id = categories.id
WHERE
  MATCH(categories.name) AGAINST('search term') OR
  MATCH(host_types.name) AGAINST('search term') OR
  MATCH(hosts.name) AGAINST('search term') OR
  MATCH(products.name, products.keywords, products.description, products.uid)
    AGAINST('search term')
ORDER BY score DESC;


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Jarak Lingkaran Besar MySQL (rumus Haversine)

  2. Rails `where` untuk waktu kurang dari kueri

  3. Ekstraksi substring MySQL menggunakan pembatas

  4. Tampilkan menu pohon dari induk yang dipilih

  5. Umpan opsi pilih dari DB tergantung pada opsi pilih lainnya