2011-07-08 94 views
1

我想在如何設置在phpMyAdmin全文索引像下面的一些指導:如何設置這個全文索引

universities: 
id 
name 

programs: 
id 
name 
university_id 

courses: 
id 
name 
program_id 

students: 
id 
name 
course_id 

搜索功能 用戶只需要檢索算法爲學生但我想創建與students.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萬名學生。

回答

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是您正在搜索的單詞。

+0

因爲我只想讓學生回來(如果搜索到學生姓名,或者某所大學的所有學生都搜索到了大學名稱,那麼匹配學生)我可以使用students.name替換'*'來實現嗎? – Joseph

+0

不,爲此,我認爲你需要爲學生,課程,程序和大學表格單獨查詢。 – Balanivash

+0

這就是你想要的:如果模式是在學生表中,你需要學生的名字,如果它在課程表中,那麼所有的學生在該課程中,如果它在程序中,那麼所有的學生在課程中,這是在該計劃中,如果是在大學,那麼所有的學生都在課程中,在大學提供的課程中。 – Balanivash

1

這不是FULLTEXT索引的工作方式。 A FULLTEXT索引必須位於MyISAM表中的單個文本(CHAR/VARCHAR/TEXT)列中,並允許搜索匹配該列內容中的單詞。例如,您可以在課程目錄中使用FULLTEXT索引以允許用戶在課程描述中搜索文本。

在你的情況,你可能想要做的是創造一個「正常」(非全文)對每個students.namecourses.nameprograms.nameuniversities.name指數,然後爲每個表執行一個查詢和合並你自己的結果。 (例如,您可能必須顯示匹配學生的結果,而不是匹配的大學的結果)。將現有的student.name字段拆分爲單獨的名字和姓氏字段可能會有所幫助,因爲這將允許你分別搜索這兩個。