mysql查询匹配多个单词并使用php显示结果

时间:2012-01-20 16:22:13

标签: php mysql

我正在尝试使用mysql查询来提取数据,该查询要求我在数据库中的字段中查找关键字。

我的数据库中的用户可能在其“主题”字段中包含以下内容:

'数学|科学|阅读|写入'

这意味着用户接受所有这些主题。此表称为“user_teacher”

我为学生准备了另一张桌子(称为'student_requests'),其中包括来自学生的说法,科学或数学,或者甚至是两个科目(因此这个案例的条目看起来像'科学|数学') 。此表还将这些值存储在名为“subject”的字段中。

我的问题是,如何在“student_requests”中查找条目,其中主题与“user_teacher”表中特定用户的个人资料中列出的任何主题相匹配,我将如何形成查询?让我们假设我最初使用以下内容查找教师的主题字段:

$query = "SELECT * FROM user_teacher WHERE username = '$username' LIMIT 1 ";
$result = mysql_query($query);
while ($row = mysql_fetch_object($result)) {
    $teacher_subjects=$row->subject;
}

换句话说,如果我是一名提供阅读和数学的老师,我想在'student_requests'表中查看主题字段中包含'math'或'reading'的所有条目。

对此的任何帮助将不胜感激。此外,如果您认为我根据我如何设置表格错误地解决了这个问题,请告诉我。我的目标是让查询尽快运行。

谢谢!

2 个答案:

答案 0 :(得分:1)

您可以尝试不为您的表使用这种结构,而是创建另一个表subjectsidname)和其他两个表students_requests({{ 1}},idid_student)[此处您可以为一位学生录制多个请求],id_subjectteach_subjectsid,{{1 (同样,教师的多个主题),你可以根据你收到的内容,在表格之间进行连接,甚至是简单的php检查。

编辑1:

id_teach

请从suject_id的{​​{1}}更改SELECT * FROM `students` WHERE `id` IN (SELECT `subject_id` FROM `students_request` INTERSECT SELECT `subject_id` FROM `teach_subject`);

答案 1 :(得分:1)

不要将subjects定义为文本字段,而是尝试使用set。你的定义应该是:

subjects SET('math', 'science', 'reading', 'writing')

然后,您可以更方便地搜索这些字段,例如:

SELECT * FROM student_requests s join user_teacher t ON (FIND_IN_SET(s.subject, t.subjects)>0) WHERE t.username = '$username';

这应该给你所有要求老师接受的科目的学生。

在此处阅读有关集合的详情:http://dev.mysql.com/doc/refman/5.0/en/set.html