#mysql #database #search #join #full-text-search
#mysql #База данных #Поиск #Присоединиться #полнотекстовый поиск
Вопрос:
У меня есть две таблицы, к которым я присоединяюсь (чтобы получить имя пользователя, я присоединяюсь к ним обеим по user_id).
Вот структура таблицы моих учетных записей:
----------- ------------------ ------ ----- ------------------- ----------------
| Field | Type | Null | Key | Default | Extra |
----------- ------------------ ------ ----- ------------------- ----------------
| user_id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| username | varchar(20) | NO | | NULL | |
| email | varchar(128) | YES | | NULL | |
| timestamp | timestamp | YES | | CURRENT_TIMESTAMP | |
| hashed_pw | varchar(255) | YES | | NULL | |
| active | char(32) | YES | | NULL | |
----------- ------------------ ------ ----- ------------------- ----------------
Вот структура таблицы моих представлений
------------- ------------------ ------ ----- ------------------- ----------------
| Field | Type | Null | Key | Default | Extra |
------------- ------------------ ------ ----- ------------------- ----------------
| id | int(10) unsigned | NO | PRI | NULL | auto_increment |
| title | varchar(255) | NO | MUL | NULL | |
| description | varchar(255) | YES | | NULL | |
| source | varchar(255) | NO | | NULL | |
| category | varchar(64) | NO | | NULL | |
| user_id | int(10) unsigned | NO | MUL | NULL | |
| submit_ip | int(4) unsigned | NO | | NULL | |
| timestamp | timestamp | NO | MUL | CURRENT_TIMESTAMP | |
| thumbnail | varchar(255) | YES | | NULL | |
------------- ------------------ ------ ----- ------------------- ----------------
Прямо сейчас я использую следующий запрос, чтобы получить то, что мне нужно, и он работает нормально:
SELECT Submissions.title, Submissions.description, Submissions.timestamp,
Accounts.user_id
FROM `Submissions`
INNER JOIN `Accounts` ON
Submissions.user_id=Accounts.user_id;
Что дает мне следующий результат:
*************************** 1. row ***************************
title: IJL that one of the men who discovered the stratosphere had a very unfortunate
name.
description:
timestamp: 2011-04-27 01:43:54
user_id: 8
*************************** 2. row ***************************
title: IJL that nuclear reactors actually glow blue.
description: Testing the description out on this one
timestamp: 2011-04-27 02:05:12
user_id: 8
Я хотел бы выполнить полнотекстовый поиск в результирующем наборе как для Submitions.title, так и для Submitions.description, например:
WHERE MATCH (Submissions.title, Submissions.description) AGAINST (?)
Как я мог бы добавить это к моему текущему запросу, чтобы получить желаемый результат?
Комментарии:
1. вы пытались вставить предложение WHERE?
Ответ №1:
сначала сделайте это
ALTER TABLE Submissions ADD FULLTEXT(title, description);
это добавит полнотекстовый поиск для этих двух столбцов
это делает это
WHERE MATCH (title, description) AGAINST (’keyword’);
Комментарии:
1. Спасибо. Глупая ошибка с моей стороны.. Я забыл кавычки вокруг предложения against. Спасибо.