获取以相同字符开头的所有列的数组。

时间:2014-04-07 10:38:18

标签: php mysql sql arrays

这在标题中很难解释,所以我会在这里尽力而为。基本上我在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语法错误)。

- 一如既往地感谢您的帮助

3 个答案:

答案 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, '%');

(除此之外:在一列中连接值是一个坏主意。为什么没有一个列用于类别而另一列用于产品代码?那么根本就没有问题。)