0

我正在尝试创建一个带有扭曲的选择框下拉菜单,

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

我得到的字符串由例如.COMPANY_SITE_DEPARTMENTSDGCC_NEWTOWN_INBOUND

使用 PHP,我希望从 logintags 表中的数据库中获取每个项目,该表可能包含多个,所以如果这有意义,我希望下拉框有特殊选择来添加所有站点?我已经尝试过了,但是如果包含标签的行不止一行,我会得到重复。COMPANY_SDGCC SDGCCSDGCC

重复:

SDGCC_NEWTOWN_INBOUND
SDGCC_NEWTOWN_QH
SDGCC_BOLTON_QH
ARISE_HOME_ORDERS
ARISE_HOME_ENQUIRIES

ETC...

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

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

SELECT DISTINCT SUBSTRING(tag, 0, LOCATE('_', tag)) FROM dept_logintags LIMIT 0, 30

但是,这不返回任何行

4

1 回答 1

4

不要重新发明轮子

基本上你想要的是COMPANY_你的登录标签的一部分。

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

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
于 2009-09-25T08:41:50.183 回答