Как я могу выполнить этот полнотекстовый поиск во ВНУТРЕННЕМ соединении в MySQL?

#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. Спасибо.