我有一个表单,用户可以从工作清单(讲师,翻译员,口译员)中选择。结果存储为变量($ employment)并发送到MySQL数据库。它们由逗号空格分隔符分隔。
管理可以通过后端页面登录,并发送到列出不同作业的目录。单击“教师”链接后,它们将转到一个页面,其中列出了所有单击“教师”的用户。
为此,我使用了代码: $ sql =“select * from GDI_teacher WHERE $ employment ='Instructor'”;
但是,如果用户选择了多个作业(例如,讲师和翻译员),则该用户不会显示为使用上述代码单击了教师。
我相信我必须使用explode()函数,但我不确定语法。我一直在猜测代码(来自其他论坛帖子),但一直没有成功。
我希望这很清楚。提前谢谢!
答案 0 :(得分:1)
explode()
只会在您运行查询并在PHP中生成结果后帮助您。您应该创建一个关系表来保存这些数据,但如果您想在mysql中获得所有正确的结果,您应该创建一个全文索引并针对它运行MySQL搜索。或者,您可以运行效率低得多的查询:
$sql = "select * from `GDI_teacher` WHERE `employment` LIKE '%Instructor%'";
在任意一侧放置通配符将使字符串匹配:
'Instructor'
'[something],Instructor'
'Instructor,[something]'
'[something],Instructor,[something]'
然而!要非常小心......如果有可能在类别中存在文本重叠(例如,'讲师'和'科学讲师'),你需要创建一个更复杂的查询(如果你不打算)( a)只需创建一个关系表(最佳解决方案)或(b)全文索引(OK解决方案)),您的最后一个查询将如下所示:
$sql = "select * from `GDI_teacher` WHERE
`employment` LIKE 'Instructor'
OR `employment` LIKE 'Instructor,%'
OR `employment` LIKE '%,Instructor'
OR `employment` LIKE '%,Instructor,%'"
如果你想给关系表一个go,你需要设置第二个MySQL表,所以你的结构看起来像:
表1
`UserID | UserName | UserEmail | etc`
..........................................................
1 | John Doe | anon@aol.com | [More]
2 | Jane Doe | jane@aol.com | [More]
3 | Jake Doe | jd@yahoo.com | [More]
表2
UserID | Employment
.........................
1 | Instructor
1 | Translator
2 | Instructor
2 | Translator
2 | Interpreter
3 | Instructor
因此,每个用户可以拥有多个可能的雇佣列表,由用户的ID标识。现在,如果您想查看谁是教师,您可以join the tables或运行子查询。
只需确保UserID是表1中的自动递增主键,并且表2中已对其进行索引(但不是唯一或主要)。根据表2的大小,您可能希望对两个{ {1}}和UserID
答案 1 :(得分:1)
来自PHP manual:
<?php
// Example 1
$pizza = "piece1 piece2 piece3 piece4 piece5 piece6";
$pieces = explode(" ", $pizza);
echo $pieces[0]; // piece1
echo $pieces[1]; // piece2
// Example 2
$data = "foo:*:1023:1000::/home/foo:/bin/sh";
list($user, $pass, $uid, $gid, $gecos, $home, $shell) = explode(":", $data);
echo $user; // foo
echo $pass; // *
?>
我希望它可以帮到你。