我有一个表单,用户可以从工作 list (讲师、笔译员、口译员)中进行选择。结果存储为变量 ($employment) 并发送到 MySQL 数据库。它们由逗号空格分隔符分隔。
管理员可以通过后端页面登录,并被发送到列出不同作业的目录。单击“讲师”链接后,他们将进入一个页面,其中列出了所有单击“讲师”的用户。
为此,我使用了代码: $sql =“从 GDI_teacher WHERE $employment='讲师'中选择 *”;
但是,如果用户选择了多个职位(例如,讲师和翻译员),则该用户不会显示为使用上面的代码单击了讲师。
我相信我必须使用explode()函数,但不确定语法。我一直在猜测代码(来自其他论坛帖子),但没有成功。
我希望这一点很清楚。提前致谢!
最佳答案
explode()
仅在您运行查询并以 PHP 形式获得结果后才会为您提供帮助。您应该创建一个关系表来保存这些数据,但如果您想在 mysql 中获得所有正确的结果,您应该创建一个全文索引并针对该索引运行 MySQL 搜索。或者,您可以运行效率低得多的查询:
$sql = "select * from `GDI_teacher` WHERE `employment` LIKE '%Instructor%'";
在任意一侧放置通配符将使字符串匹配:
'Instructor'
'[something],Instructor'
'Instructor,[something]'
'[something],Instructor,[something]'
但是!要非常小心...如果类别中可能存在文本重叠(例如,“讲师”和“科学讲师”),您需要创建一个更复杂的查询(如果您不打算( a)只需创建一个关系表(最佳解决方案)或(b)一个全文索引(好的解决方案))您最后的查询将如下所示:
$sql = "select * from `GDI_teacher` WHERE
`employment` LIKE 'Instructor'
OR `employment` LIKE 'Instructor,%'
OR `employment` LIKE '%,Instructor'
OR `employment` LIKE '%,Instructor,%'"
如果您想尝试使用关系表,则需要设置第二个 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 的大小,您可能需要对两者都建立索引 UserID
和 Employment
关于phpexplode() 来自 MySQL 数据库的变量 - 正确的语法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9170623/