我正在运行MySQL 5.0.88
,并搜索了我运行的presearch
以确定number of records
,。 min-max values
以及element strings of distinct values
。如何选择MySQL子查询中的所有不同值到group_concat中?
查询的结果会是这样的:
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找回,我想我只选择第一个尺寸(S
)的文章,并创建一个GROUP_CONCAT of all DISTINCT first sizes
而不是记录集的所有DISTINCT尺寸的GROUP_CONCAT
。
问题: 有人可以给我一个指针,我需要如何调整我的GROUP_CONCAT
?
谢谢!
这是我目前正在
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(a.preis_ek) AS max_price_ek
, MIN(a.preis_ek) 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 "%402%"
GROUP BY a.iln, a.artikelnummer
HAVING ((sum(a.bestand) != 0) OR (a.nos = "ja" AND a.nos_anzeige = "ja"))
) AS temp
我已删除了第三个表(货币查找/ leftjoin)测试查询,因为结果是有或没有它假。这是剩下的两个表:
** 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
)
我现在(402
)搭配单品测试。该产品有4种尺寸和两种颜色,因此这是数据库中的8条记录。在其上运行查询应返回s,m,l,xl
大小,red, black
返回Group__concat的颜色。然而,我只是得到(arbitraty?)s
和red
作为结果。
仍然无能为力。
有你尝试通过删除substring_index函数,即简单地使用group_concat函数? – Shubhansh
hm。有没有另外一种方法来限制什么才能进入GROUP_CONCAT呢?如果可能的话,我只包含TOP 20发生的尺寸/颜色,而不是将GROUP_CONCAT限制为10/16的结果 – frequent
您是以什么标准定义TOP 20? – Shubhansh