拆分字符串并加入重复项

时间:2009-09-25 08:37:45

标签: php string duplicate-removal

我正在尝试创建一个带有扭曲的选择框下拉列表

基本上这是一个Ajax表单,当从列表中选择一个项目时,它会将它添加到文本字段中。不过我还想在这里添加一些额外的选择。

我收到的字符串由 COMPANY _ SITE _ 组成DEPARTMENT ,例如SDGCC_NEWTOWN_INBOUND

使用PHP我希望从logintags表中获取数据库中的每个项目,其中可能包含多个 COMPANY _,所以任何声明SDGCC我想要的内容如果有意义的话,下拉框可以选择添加所有 SDGCC网站吗?我已经尝试过但如果有多行包含SDGCC标记,我会得到重复。

重复:

  

SDGCC_NEWTOWN_INBOUND
  SDGCC_NEWTOWN_QH
  SDGCC_BOLTON_QH
  ARISE_HOME_ORDERS
  ARISE_HOME_ENQUIRIES

等等......

所以基本上它可以选择所有SDGCC站点,但因为该数据库可能随时改变,我们只需要字符串的第一部分(即SDGCC,ARISE)部分显示(一次)选择框。

我目前正在尝试从下面建议查询

  

SELECT DISTINCT SUBSTRING(tag,0,LOCATE('_',tag))   来自dept_logintags   限制0,30

然而,这不会返回任何行

1 个答案:

答案 0 :(得分:4)

不要重新发明轮子

基本上你想要的是你的logintags的COMPANY_部分。

为什么不以DISTINCT的形式从数据库中读取数据?通过在查询中删除第一部分的表达式列,您可以轻松地在字符串值的第一部分上生成DISTINCT。所以你根本不需要在中间层上进行任何字符串操作?

Microsoft SQL示例

// first part
SELECT DISTINCT SUBSTRING(tag, 0, CHARINDEX(tag, '_')) FROM dept_logintags
// second part
SELECT DISTINCT SUBSTRING(SUBSTRING(tag, CHARINDEX(tag, '_') + 1, LEN(tag)), 0, CHARINDEX(tag, '_')) from dept_logintagss
// last part
SELECT DISTINCT SUBSTRING(SUBSTRING(tag, CHARINDEX(tag, '_') + 1, LEN(tag)), CHARINDEX(tag, '_') + 1, LEN(tag)) from dept_logintags

因为最后你想在PHP中做同样的事情。

MySQL示例

在MySQL中,您甚至可以使用SUBSTRING_INDEX函数来进一步简化选择

// first part
SELECT DISTINCT SUBSTRING_INDEX(tag, '_', 1) FROM dept_logintags
// second part
SELECT DISTINCT SUBSTRING_INDEX(SUBSTRING_INDEX(tag, '_', 2), '_', -1) from dept_logintags
// last part
SELECT DISTINCT SUBSTRING_INDEX(tag, '_', -1) FROM dept_logintags