如何设置此全文索引

时间:2011-07-08 14:41:51

标签: php mysql phpmyadmin

我想了解如何在phpMyAdmin中设置全文索引的一些指导,如下所示:

universities:
id
name

programs:
id
name
university_id

courses:
id
name
program_id

students:
id
name
course_id

搜索功能 用户只需要为学生搜索,但我想创建与student.course_id匹配的students.name和courses.name的全文,以便学生姓名,课程名称(学生参与),程序名称(课程名称)和大学名称(程序属于)都是可搜索的。

查询 如果我按上述方法构建它,则会创建全文,以便可以像标准一样进行搜索,例如与PDO:

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

或者如何在php中查看pdo查询?

这也是一个沉重的搜索功能吗?

大约数字:5所大学,100个课程1 000个课程和2万名学生。

2 个答案:

答案 0 :(得分:1)

这不是FULLTEXT索引的工作方式。 FULLTEXT索引必须位于MyISAM表中的单个文本(CHAR / VARCHAR / TEXT)列上,并允许搜索匹配该列内容中的字词。例如,您可以在课程目录中使用FULLTEXT索引,以允许用户在课程描述中搜索文本。

在您的情况下,您可能想要做的是在students.namecourses.nameprograms.name和{{}中创​​建一个“普通”(非全文)索引1}},然后为每个表执行一个查询并自己合并结果。 (例如,您可能必须以不同于匹配大学的方式显示匹配学生的结果。)将现有universities.name字段分解为单独的名字和姓氏字段可能有所帮助,如那将允许你分别搜索这两个。

答案 1 :(得分:0)

在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是您要搜索的字词。