Как установить этот полнотекстовый индекс - PullRequest
1 голос
/ 08 июля 2011

Я хотел бы получить некоторые рекомендации о том, как установить полнотекстовый индекс в phpMyAdmin, например:

Таблицы

universities:
id
name

programs:
id
name
university_id

courses:
id
name
program_id

students:
id
name
course_id

Функция поиска Пользователю нужно только искать студентов, но мне бы хотелосьсоздать полный текст файла Students.name и courses.name, который соответствует student.course_id и т. д., с тем чтобы имя студента, название курса (учащийся участвует), название программы (курс указан в) и название университета (Программа относится к) все для поиска.

Запрос Если я построю его, как указано выше, будет создан полный текст так, чтобы его можно было искать как стандартный, например, с PDO:

$STH = $DBH->prepare('SELECT * FROM students WHERE MATCH(fulltext) AGAINST(:query IN BOOLEAN MODE));
$STH->bindParam(':query', $query);

или какбудет ли pdo запрос выглядеть в php?

Также это будет сложная функция поиска?

Приблизительные числа: 5 университетов, 100 программ, 1 000 курсов и 20 000 студентов.

Ответы [ 2 ]

1 голос
/ 08 июля 2011

Не так * работают индексы FULLTEXT.Индекс FULLTEXT должен находиться в одном текстовом (CHAR / VARCHAR / TEXT) столбце в таблице MyISAM и разрешать поискам сопоставлять слова в содержимом этого столбца.Например, вы можете использовать индекс FULLTEXT в каталоге курса, чтобы пользователи могли искать текст в описании курса.

В вашем случае вы, вероятно, захотите создать один «обычный» (не-fulltext) для каждого из students.name, courses.name, programs.name и universities.name, затем выполните один запрос для каждой из этих таблиц и объедините результаты самостоятельно.(Вам, вероятно, придется отображать результаты для сопоставленного студента, например, не совпадающего с университетом.) Это может помочь несколько разбить существующее поле student.name на отдельное поле имени и фамилии, например:Позвольте вам искать эти два отдельно.

0 голосов
/ 08 июля 2011

В PHP

 $query= "SELECT * FROM students,courses,programes,universities WHERE MATCH(students.name,courses.name,programs.name,universities.name) AGAINST('$keyword' IN BOOLEAN MODE)"
 $result = mysql_query($query);

$keyword - это слово, которое вы хотите найти.

РЕДАКТИРОВАТЬ

На основании комментария,Подумайте, это то, что вам нужно

 SELECT name from student where name like %key% OR 
    course_id IN (SELECT id FROM course WHERE name like %key%) OR 
    course_id IN (SELECT id FROM course WHERE program_id IN (
           SELECT id FROM program WHERE name Like %key%)) OR
    course_id IN (SELECT id FROM course WHERE program_id IN (
      SELECT id FROM program WHERE university_id in (
         SELECT id from university where name like %$key%))) 

Где key - слово, которое вы ищете.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...