Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/62.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
MySQL按id字段上的x个字符分组_Mysql_Sql_Group By - Fatal编程技术网

MySQL按id字段上的x个字符分组

MySQL按id字段上的x个字符分组,mysql,sql,group-by,Mysql,Sql,Group By,我有一个处于非常糟糕状态的客户机数据库,但我必须使用它。我们有一组产品id,每个id由产品的属性组成。我想做的是选择那些与前4或5个字符匹配的id,并将它们作为所选产品的变体放在下拉框中 我尝试了“按subtr(0,6)”分组,但这似乎只返回组中的第一个匹配。我需要的是有单独的查询,只返回具有匹配的前x个字符的所有单独行 因此,例如,我希望查询将返回: 12345xx 12345yy 12345zz 然后另一个将返回: 56789xx 56789yy 56789zz 以下查询将仅返回: 1234

我有一个处于非常糟糕状态的客户机数据库,但我必须使用它。我们有一组产品id,每个id由产品的属性组成。我想做的是选择那些与前4或5个字符匹配的id,并将它们作为所选产品的变体放在下拉框中

我尝试了“按subtr(0,6)”分组,但这似乎只返回组中的第一个匹配。我需要的是有单独的查询,只返回具有匹配的前x个字符的所有单独行

因此,例如,我希望查询将返回: 12345xx 12345yy 12345zz

然后另一个将返回: 56789xx 56789yy 56789zz

以下查询将仅返回:

12345xx

然后

例如56789yy

select tbl_item.Description, tbl_item.`Description 2`, tbl_item.`Inventory Posting Group`, tbl_item.No_, tbl_item.`Web Description`, tbl_item.`Web Headers`, tbl_item.`Unit Price`, tbl_item.`Sales (Qty_)`, tbl_item.`Product Group Code`
from tbl_item
where tbl_item.`Product Group Code` = ':shopprodid' and tbl_item.`Vendor No_` = '$vendor_no'
group by substr(0,6)

解决方案是将substr等放在WHERE子句中(无需对任何内容进行分组)。顺便说一句,在MySql中,子字符串从索引1开始,而不是从0开始

select *
from tbl_item
where substr(tbl_item.`Product Group Code`, 1, 6) LIKE ':shopprodid%'

尝试下面的方法

SELECT * FROM tbl_item WHERE SUBSTR([<Column name>], 1, 6) = '<Your ID prefix>' ORDER BY [<Column name>]
SELECT*FROM tbl_item,其中SUBSTR([],1,6)=''ORDER BY[]

你所说的
substr(0,6)
是什么意思?正确的语法是

SUBSTR( str, pos, len )
我想你的意思是:

SUBSTR( tbl_item.id, 0, 6 )
纠正一下

对于想要的结果,您根本不需要substr,请使用如下查询:

SELECT * from tbl_item WHERE tbl_item.id LIKE '12345%'

或者只查找以前缀开头的条目。其中LIKE='%'谢谢。我事先不知道前缀,我通过供应商id只知道产品的一个子集。因此,我想对结果进行分组,但“分组依据”只返回“分组”的一个匹配项。我认为您建议的通配符可能会起作用,但我希望尽量减少对db的查询。我会有一个剧本,谢谢。是的,谢谢。代码就像你说的,带有列名,但我在这里添加了错误,所以道歉。我将尝试使用通配符,但不确定它是否正是我所需要的。我试试看,谢谢。这个语法看起来很有趣,冒号是否将其作为变量引用?啊,对不起,它似乎将“$\u GET”替换为: