首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用PHP/MySQL,如何从包含多值列内容的表中选择

使用PHP/MySQL,如何从包含多值列内容的表中选择
EN

Stack Overflow用户
提问于 2015-03-25 11:52:58
回答 1查看 190关注 0票数 2

这件事让我很困惑。我正在尝试从一个具有公司数据的表中创建一个报表,其中包括两个列,这两个列都可以具有多个值。一家公司可以被归类为属于一个或多个集团:

行业:黄金;贵金属;钻石;.所属行业:矿业;炼油;市场营销;.

我需要按行业/行业编制一个按字母顺序排列的公司名单。我的第一个方法是这样做:

代码语言:javascript
复制
$request = "SELECT sector, industry, name, uid FROM colist ORDER BY LOWER(industry),LOWER(sector) ASC"  ;

但是这给了我一个结果,这个结果仅由多个元素中的第一个元素排序。因此,行业的结构化层叠视图在顶层看起来是这样的:

在本例中,它不会将具有多个值的行分解为单独的条目(天然气公用事业/中流-石油和天然气)和(黄金开采/黄金和银)和(通用医药/专业制药)。

更难的是,我需要能够按字母顺序选择一个范围,否则这个视图对用户来说是无法管理的。同样,在这个例子中,如果我选择字母M,那么在列表中有燃气公用事业的公司的条目将不会显示。

是否有可能解决。任何想法都将不胜感激。

EN

回答 1

Stack Overflow用户

发布于 2015-03-30 15:24:25

先澄清这个问题..。因为没人能试着回答。我的数据库包含有关公司业务活动的信息,需要在报告中进行分类。从复选框中的可能值列表中选择数据的一个元素。例如,一家公司可以被归类为在几个不同的领域工作(比如说黄金开采,黄金精炼,勘探,金属)。接下来,我需要一个字母列表(逐个字母),所有的公司,选择的商业活动。

我正在尝试的解决方案是有效的,但只适用于活动列表中的第一个元素。举个例子,如果我寻找以字母"G“开头的活动,它会返回公司,因为该列确实以字母"G”开头,但如果我查找字母"E",它将找不到公司,因为该列没有以字母"E“开头,即使公司确实将其归类为”探索“。

答案是..。行中的列可以用作存储多个值的数组,但只有创建和读取它的程序员代码才知道这一点。不理解数组--对于,行/列内容只是一个字符串。使用上面的示例,虽然我认为数据是数组中独立元素的列表,但如下所示:

代码语言:javascript
复制
Gold Mining
Gold Refining
Exploration
Metals

对于SQL,这看起来很像Gold Mining,Gold Refining,Exploration,Metals,所以没有任何逻辑可以直接应用。

但是,只要谨慎使用正确的分隔符(逗号是非常糟糕的选择),那么即使SQL不知道,也可以使用一些SQL代码来查找数组中的所有元素。

使用特殊字符%和LIKE,您可以匹配您所知道的分隔元素的模式。使用一个更好的例子,如果您创建了一个更专门的分隔符,最好是一个永远不会在文本中使用的分隔符,那么一切都会工作的。取我的旧列表,并添加一个更具体的分隔符,您将得到类似于Gold Mining~Gold Refining~Exploration~Metals的文本。在我自己的代码中,我可以用它创建一个数组,并以任何我想要的方式处理它,就像这样.

代码语言:javascript
复制
$chosen = explode("~" , $row['industry']) ;foreach ($chosen as $choice){...do something};

现在,要单独选择字符串中的每个元素,需要告诉SQL要查找什么作为分隔符,如下所示.

代码语言:javascript
复制
$request = "SELECT sector, industry, company_id, name, stat FROM companies WHERE isopen <> '' AND ( industry LIKE '". $sk . "%' OR industry LIKE '%;". $sk . "%' ORDER BY LOWER(industry),LOWER(sector) ASC"  ;}

代码中的$sk是用户可以从字母表中选择的单个字母,指示行业的起始字母是什么。

必要的部分是告诉SQL查找包含分隔符的模式。以寻找字母"E“为例,它可以有两种形式,一种是E.如果它是“数组”或...~E中的第一个元素.如果是后续元素的话。

终于明白了。希望这能帮到别人。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/29254908

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档