Что касается использований в качестве примера неподписанный символ :
неподписанный символ часто используется в компьютерной графике, которая очень часто (хотя не всегда) присваивает единственный байт каждому компоненту цвета. Распространено видеть RGB (или RGBA) цвет, представленный как 24 (или 32) биты, каждый неподписанный символ . С тех пор неподписанный символ падение значений диапазона [0,255], значения обычно интерпретируются как:
, Таким образом, Вы закончили бы с RGB, красным как (255,0,0)-> (100%-й красный, 0%-й зеленый, 0%-й синий цвет).
, Почему бы не использовать символ со знаком ? Арифметика и разрядное смещение становятся проблематичными. Как объяснено уже, диапазон символа со знаком по существу смещается на-128. Очень простой и наивный (главным образом неиспользованный) метод для преобразования RGB к шкале полутонов должен составить в среднем все три компонента цвета, но это сталкивается с проблемами, когда значения компонентов цвета отрицательны. Красный (255, 0, 0) средние числа к (85, 85, 85) при использовании неподписанный символ арифметика. Однако, если бы значения были символ со знаком s (127,-128,-128), мы закончили бы с (-99,-99,-99), который будет (29, 29, 29) в нашем неподписанный символ пространство, которое является неправильным.
В MySQL нельзя определять полнотекстовые индексы (или любые другие) для нескольких таблиц. Каждое определение индекса ссылается только на одну таблицу. Все столбцы в данном полнотекстовом индексе должны быть из одной таблицы.
Столбцы, названные в качестве аргументов функции MATCH ()
, должны быть частью единственного полнотекстового индекса. Вы не можете использовать один вызов MATCH ()
для поиска всех столбцов, которые являются частью всех полнотекстовых индексов в вашей базе данных.
Полнотекстовые индексы только индексируют столбцы, определенные с помощью CHAR
, VARCHAR
и TEXT
типы данных.
Вы можете определить полнотекстовый индекс в каждой таблице.
Пример:
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)
);
А затем вы можете написать запрос, который использует каждый соответствующий полнотекстовый индекс:
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;