这在标题中很难解释,所以我会在这里尽力而为。基本上我在MySQL产品表中有一个包含以下行的列:
FEL10
FEL20
FEL30
PRO05
PRO07
PRO08
VAI12
VAI13
VAI14
这些是类别(“FEL”,“PRO”,“VAI”)和我的产品的标识号(“10”,“20”等)。我需要一个SQL select查询,它创建一个文本数组,如:
FEL*
PRO*
VAI*
使用此数组我需要创建一个列表框,允许我选择一个类别(无论标识号如何)。一旦我选择了一个类别,让我们说PRO *,我需要做相反的操作:打印所有与PRO05,PRO07和PRO08相关的产品信息。
您认为如何实现这一目标?我一直在尝试使用DISTINCT语句但我只需要过滤掉第一个字符,否则它将无用。我也尝试了SUBSTRING()和LEFT()函数,但它们似乎没有工作(我得到一个SQL语法错误)。
- 一如既往地感谢您的帮助
答案 0 :(得分:2)
有什么问题?
SELECT distinct left(col, 3) as category FROM `table1`
答案 1 :(得分:1)
MySQL LIKE
到resque:
SELECT col1 FROM table1 WHERE col1 LIKE 'FEL%';
这样您就必须使用OR
添加所有案例。
替代方案 - REGEXP
:
SELECT col1 FROM table1 WHERE col1 REGEXP '(FEL|PRO|VAI).*'
然后,这只是编写正确的正则表达式的问题。
我会使用额外的col来对你的项目进行分组 - 以避免完全选择(在较大的数据集上应该非常昂贵)。
https://dev.mysql.com/doc/refman/5.1/en/regexp.html#operator_regexp
答案 2 :(得分:1)
要获取3个字母的代码列表,请使用:
select distinct left(combicode, 3)
from mytable;
当用户选择其中一个值时,使用它来获取所有匹配的条目:
select *
from mytable
where combicode like concat(@category, '%');
(除此之外:在一列中连接值是一个坏主意。为什么没有一个列用于类别而另一列用于产品代码?那么根本就没有问题。)