如何将MySQL子查询中的所有不同值选择到一个组中?
我运行的是MySQL 5.0.88,有一个搜索,我正在运行一个预搜索来确定记录的数量,。最小最大值以及具有不同值的元素字符串 查询结果如下所示:如何将MySQL子查询中的所有不同值选择到一个组中?,mysql,select,subquery,substring,group-concat,Mysql,Select,Subquery,Substring,Group Concat,我运行的是MySQL 5.0.88,有一个搜索,我正在运行一个预搜索来确定记录的数量,。最小最大值以及具有不同值的元素字符串 查询结果如下所示: records min-price max-price sizeRange colorRange 1234 9.00 124.00 S,M,L,XL red,blue,white,orange SELECT COUNT(recordcount) AS total_r
records min-price max-price sizeRange colorRange
1234 9.00 124.00 S,M,L,XL red,blue,white,orange
SELECT COUNT(recordcount) AS total_records
, MIN(min_price_ek) AS ek_min
, MAX(max_price_ek) AS ek_max
, SUBSTRING_INDEX( GROUP_CONCAT( DISTINCT sizeRange ), ',', 10 ) AS sz_rng
, SUBSTRING_INDEX( GROUP_CONCAT( DISTINCT colorRange ), ',', 16 ) AS cl_rng
FROM (SELECT a.id AS recordcount
, a.nos
, a.nos_anzeige
, MAX(<cfif variables.preislisten neq "">IFNULL(p.ek, a.preis_ek)<cfelse>a.preis_ek</cfif>) AS max_price_ek
, MIN(<cfif variables.preislisten neq "">IFNULL(p.ek, a.preis_ek)<cfelse>a.preis_ek</cfif>) AS min_price_ek
, a.groesse AS sizeRange
, zu.systemfarbe AS colorRange
FROM artikelstammdaten a
LEFT JOIN farbenzuordnung zu
ON a.farbe = zu.farbe
WHERE a.aktiv = "ja"
AND a.artikelnummer LIKE <cfqueryparam value="#art#" cfsqltype="cf_sql_varchar">
GROUP BY a.iln, a.artikelnummer, a.preis_aktuell, a.artikelbezeichnung
HAVING (( sum(a.bestand) != 0 ) OR (a.nos = "ja" AND a.nos_anzeige = "ja" ))
) AS temp
CREATE TABLE dummy (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`iln` VARCHAR(13) NULL DEFAULT NULL,
`ean` VARCHAR(35) NULL DEFAULT NULL,
`artikelnummer` VARCHAR(35) NULL DEFAULT NULL,
`preis_ek` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_vk` DECIMAL(12,2) NULL DEFAULT NULL,
`firma` VARCHAR(35) NULL DEFAULT NULL,
`nos` VARCHAR(4) NULL DEFAULT NULL,
`nos_anzeige` VARCHAR(4) NULL DEFAULT NULL,
`aktiv` VARCHAR(4) NULL DEFAULT NULL,
`bestand` DECIMAL(10,0) NULL DEFAULT '0'
)
我的查询如下所示:
records min-price max-price sizeRange colorRange
1234 9.00 124.00 S,M,L,XL red,blue,white,orange
SELECT COUNT(recordcount) AS total_records
, MIN(min_price_ek) AS ek_min
, MAX(max_price_ek) AS ek_max
, SUBSTRING_INDEX( GROUP_CONCAT( DISTINCT sizeRange ), ',', 10 ) AS sz_rng
, SUBSTRING_INDEX( GROUP_CONCAT( DISTINCT colorRange ), ',', 16 ) AS cl_rng
FROM (SELECT a.id AS recordcount
, a.nos
, a.nos_anzeige
, MAX(<cfif variables.preislisten neq "">IFNULL(p.ek, a.preis_ek)<cfelse>a.preis_ek</cfif>) AS max_price_ek
, MIN(<cfif variables.preislisten neq "">IFNULL(p.ek, a.preis_ek)<cfelse>a.preis_ek</cfif>) AS min_price_ek
, a.groesse AS sizeRange
, zu.systemfarbe AS colorRange
FROM artikelstammdaten a
LEFT JOIN farbenzuordnung zu
ON a.farbe = zu.farbe
WHERE a.aktiv = "ja"
AND a.artikelnummer LIKE <cfqueryparam value="#art#" cfsqltype="cf_sql_varchar">
GROUP BY a.iln, a.artikelnummer, a.preis_aktuell, a.artikelbezeichnung
HAVING (( sum(a.bestand) != 0 ) OR (a.nos = "ja" AND a.nos_anzeige = "ja" ))
) AS temp
CREATE TABLE dummy (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`iln` VARCHAR(13) NULL DEFAULT NULL,
`ean` VARCHAR(35) NULL DEFAULT NULL,
`artikelnummer` VARCHAR(35) NULL DEFAULT NULL,
`preis_ek` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_vk` DECIMAL(12,2) NULL DEFAULT NULL,
`firma` VARCHAR(35) NULL DEFAULT NULL,
`nos` VARCHAR(4) NULL DEFAULT NULL,
`nos_anzeige` VARCHAR(4) NULL DEFAULT NULL,
`aktiv` VARCHAR(4) NULL DEFAULT NULL,
`bestand` DECIMAL(10,0) NULL DEFAULT '0'
)
因此,产品将存储在表中,每个尺寸有一个条目,如下所示:
product_id ean size price
1234 111111111111 S 9.99
1234 111111111112 M 9.99
1234 111111111113...
从MySQL中得到的信息来看,我认为我只是选择了文章的第一个大小,并创建了一个具有所有不同第一个大小的组,而不是一个具有所有不同记录集大小的组
问题:
有人能告诉我如何调整我的团队吗
谢谢
这是我目前正在测试的查询
我已经删除了第三个表currency lookup/leftjoin,因为无论有没有它,结果都是false。这是剩下的两个表:
** artikelstammdaten = product data **
CREATE TABLE dummy (
`id` INT(11) NOT NULL AUTO_INCREMENT,
`iln` VARCHAR(13) NULL DEFAULT NULL,
`ean` VARCHAR(35) NULL DEFAULT NULL,
`artikelnummer` VARCHAR(35) NULL DEFAULT NULL,
`groesse` VARCHAR(10) NULL DEFAULT NULL,
`farbe` VARCHAR(35) NULL DEFAULT NULL,
`preis_ek` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_vk` DECIMAL(12,2) NULL DEFAULT NULL,
`preis_aktuell` DECIMAL(12,2) NULL DEFAULT NULL,
`marke` VARCHAR(35) NULL DEFAULT NULL,
`nos` VARCHAR(4) NULL DEFAULT NULL,
`nos_anzeige` VARCHAR(4) NULL DEFAULT NULL,
`aktiv` VARCHAR(4) NULL DEFAULT NULL,
`modus` VARCHAR(4) NULL DEFAULT NULL,
`bestand` DECIMAL(10,0) NULL DEFAULT '0'
)
** global colors / farbenzuordnung **
CREATE TABLE dummy (
`ILN` VARCHAR(13) NOT NULL,
`farbe` VARCHAR(35) NOT NULL,
`systemfarbe` VARCHAR(35) NOT NULL,
`systemfarbe_en` VARCHAR(35) NOT NULL
)
我现在正在测试一个产品。该产品有4种尺寸和两种颜色,因此数据库中有8条记录。在其上运行查询时,应返回s、m、l、xl作为大小,红色、黑色作为组__concat作为颜色。但是我只得到仲裁?s和红色作为结果
仍然不知道为什么 您可以使用如下查询: 注意:您需要根据自己的需求在下面的查询中定义条件
SELECT COUNT(recordcount) AS total_records
, MIN(min_price_ek) AS ek_min
, MAX(max_price_ek) AS ek_max
, SUBSTRING_INDEX( GROUP_CONCAT( DISTINCT sizeRange ORDER BY [criteria]), ',', 20 ) AS sz_rng
, SUBSTRING_INDEX( GROUP_CONCAT( DISTINCT colorRange ORDER BY [criteria]), ',', 20 ) AS cl_rng
FROM (SELECT a.id AS recordcount
, a.nos
, a.nos_anzeige
, MAX(<cfif variables.preislisten neq "">IFNULL(p.ek, a.preis_ek)<cfelse>a.preis_ek</cfif>) AS max_price_ek
, MIN(<cfif variables.preislisten neq "">IFNULL(p.ek, a.preis_ek)<cfelse>a.preis_ek</cfif>) AS min_price_ek
, a.groesse AS sizeRange
, zu.systemfarbe AS colorRange
FROM artikelstammdaten a
LEFT JOIN farbenzuordnung zu
ON a.farbe = zu.farbe
WHERE a.aktiv = "ja"
AND a.artikelnummer LIKE <cfqueryparam value="#art#" cfsqltype="cf_sql_varchar">
GROUP BY a.iln, a.artikelnummer, a.preis_aktuell, a.artikelbezeichnung
HAVING (( sum(a.bestand) != 0 ) OR (a.nos = "ja" AND a.nos_anzeige = "ja" ))
) AS temp
希望对您有所帮助……您是否尝试过删除子字符串索引函数,即简单地使用组目录函数?嗯,是否有其他方法限制组目录中的内容?如果可能的话,我只会列出前20名出现的大小/颜色,而不是将组的结果限制在10/16。根据什么标准定义前20名?对不起。大多数事件。那么大小XL在结果集中的频率是多少?例如,子查询中的a.nos_anzeige和a.nos是什么?酷。试试这个。谢谢你!hm.MySQL正在抱怨组函数的无效使用。你用什么来代替标准?现在我让CountSizeRange提供有关列和表的一些描述,以便我们可以研究一下。。。