2011-02-13 162 views
0

我有一个课程页面,此页面设置为显示详细信息(简单),然后谁在教授每个学期的第一,第二,第三和第四个周期。问题在于,我的教师数据是在一个巨大的链条中处理的。MySQL查询搜索(高级)

鲍比:1-1-1-1-1-1-1-1

蒂娜:20-20-20-10-1-1-1-1

乔伊:20- 1-1-1-49-432-10-19

我想要做的是找到一个课程:20,当显示所有信息时,通过教师搜索将找出谁在教授课程20和什么时期?

Ex。

Course id: 20 
Period 1: Joey, Tina 
Period 2: Tina 
Period 3: Tina 

我想每一位教师在教学一个搜索该课程,但鉴于这可能是一个问题capact数据的障碍。

教师表: ID /名称/链接/场(1-1-1-1-1-1-1-1)

课程表: ID /名称/代码/级/水平

教师课程包含的ID从课程表

+0

什么是你的数据库看起来像通缉名单? (dbms,结构,版本) – GolezTrol 2011-02-13 14:06:30

+4

这是谁存储它? – 2011-02-13 14:07:31

回答

1

在重新构建你的数据库可能是最好的答案,我想我会发布一个直PHP的解决方案,与当前的结构工程和推定休息的代码。

//I set up variables to contain your expected search results so I could test 
$search_course = '20'; 
$search_results = array(
    'Bobby' => '1-1-1-1-1-1-1-1', 
    'Tina' => '20-20-20-10-1-1-1-1', 
    'Joey' => '20-1-1-1-49-432-10-19' 
    ); 

//explode the course strings into arrays and store with teacher names so 
//you can loop through them later 
foreach($search_results as $teacher=>$string_courses){ 
    $array_courses = explode('-',$string_courses); 
    $search_results[$teacher] = $array_courses; 
    } 

//Match course you are searching for to the elements in your array 
//Create a result array with period and matching teachers 
foreach($search_results as $teacher=>$courses){ 
foreach($courses as $period => $course){ 
    if($course == $search_course){ 
      $results[$period][] = $teacher; 
      } 
     } 
    } 

//Loop through your result array and show the results 
//I expect you'll have different html for this 
foreach($results as $period => $teachers){ 
    echo 'Period: '; 
    echo $period+1; 
    echo implode(',',$teachers); 
    echo '<br>'; 
} 

打印结果符合您在您的OP

0

你应该改变,而不是存储所有时期的字符串你的数据库的结构,你应该有三列附加表:老师,当然,周期和在这个表格中为每个老师教授的课程单独一行。然后,确定谁在教授什么课程只是按课程ID查询该表格,然后按期间排序。 e.g:

SELECT teacher_id, course_id, period FROM course_info WHERE course_id = 20 
ORDER BY period; 
1

创建新表

事情是这样的:

CREATE TABLE `TeacherToPeriod` (
`id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , 
`TeacherID` INT NOT NULL , 
`CourseID` INT NOT NULL , 
`Period` INT NOT NULL 
) ENGINE = MYISAM ; 

插入数据

这里是一些PHP-代码:

foreach($lines as $line){ 
    $line_data = split($line, ': '); 
    $teacher = $line_data[0]; 
    // SELECT your $teacher_id from the database 

    $courses = split($line_data[0], '-'); 
    $i = 0; 
    foreach($courses as $course_id){ 
     $i++; 
     $sql = "INSERT INTO `TeacherToPeriod` (`TeacherID` ,`CourseID` ,`Period`) "; 
     $sql.= "VALUES ($teacher_id, $course_id, $i);" 
     mysql_query($sql); 
    } 
} 

选择数据你想

SELECT * FROM `TeacherToPeriod` WHERE `CourseID` = 20 ORDER BY `Period` ASC;