我正在尝试使用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'的所有条目。
对此的任何帮助将不胜感激。此外,如果您认为我根据我如何设置表格错误地解决了这个问题,请告诉我。我的目标是让查询尽快运行。
谢谢!
答案 0 :(得分:1)
您可以尝试不为您的表使用这种结构,而是创建另一个表subjects
(id
,name
)和其他两个表students_requests
({{ 1}},id
,id_student
)[此处您可以为一位学生录制多个请求],id_subject
(teach_subjects
,id
,{{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