我正在尝试创建一个带有扭曲的选择框下拉列表
基本上这是一个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
然而,这不会返回任何行
答案 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