【问题标题】:php explode() a variable from MySQL database - proper syntax?php explode() 来自 MySQL 数据库的变量 - 正确的语法?
【发布时间】:2012-02-07 03:30:56
【问题描述】:

我有一个表单,用户可以从工作清单(讲师、翻译、口译员)中进行选择。结果存储为变量 ($employment) 并发送到 MySQL 数据库。它们由逗号分隔符分隔。

管理员可以通过后端页面登录并发送到列出不同作业的目录。单击“讲师”链接时,他们会被带到一个页面,其中列出了所有单击“讲师”的用户。

为此,我使用了以下代码: $sql = "select * from GDI_teacher WHERE $employment='Instructor'";

但是,如果用户选择了多个工作(例如,讲师和翻译),则该用户不会显示为使用上面的代码单击了讲师。

我相信我必须使用explode() 函数,但不确定语法。我一直在猜测代码(来自其他论坛帖子),但没有成功。

我希望这很清楚。提前致谢!

【问题讨论】:

  • 修复db结构,以后会解决这个问题和其他很多问题
  • 您能详细说明一下吗?我应该如何解决它?需要改变什么?

标签: php mysql variables explode


【解决方案1】:

explode() 只会在您运行查询并在 PHP 中获得结果后为您提供帮助。你应该创建一个关系表来保存这些数据,但是如果你想在 mysql 中获得所有正确的结果,你应该创建一个全文索引并运行你的 MySQL 搜索。或者,您可以运行效率低得多的查询:

$sql = "select * from `GDI_teacher` WHERE `employment` LIKE '%Instructor%'";

在任一侧放置通配符将使字符串匹配:

'Instructor'
'[something],Instructor'
'Instructor,[something]'
'[something],Instructor,[something]'

但是!要非常小心......如果类别中有任何文本重叠的可能性(例如,'Instructor'和'Instructor of Science'),你需要创建一个更复杂的查询(如果你不打算( a) 只需创建一个关系表 (BEST SOLUTION) 或 (b) 全文索引 (OK SOLUTION)) 您最后的查询将如下所示:

$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 的大小,您可能希望同时索引 @ 987654328@和Employment

【讨论】:

  • 你能解释一下'关系表'吗?如果我应该这样做,那就是我想做的。
  • 我在答案中添加了解释。设置它需要更多的工作,但它会显着增加您可以做的事情的数量以及随着桌子变得更好它的工作速度。
  • 哇!太感谢了!目前,我将按照您的建议使用$sql = "SELECT * from GDI_teacher WHERE employment LIKE '%Instructor%'";。但我绝对会尝试按照你可爱的例子来重构我的 MySQL。哦,我对这一切都很陌生。很好的答案。 :) 干杯
【解决方案2】:

来自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; // *

?>

希望对你有帮助。

【讨论】:

  • 不完全。我需要从 MySQL 数据库 $employment 中分解一个变量,而不是像 PHP 手册显示的那样直接写入我的代码中的文字。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2018-07-05
  • 2019-11-06
  • 1970-01-01
  • 1970-01-01
  • 2014-02-03
  • 1970-01-01
  • 2012-11-03
相关资源
最近更新 更多