我正在運行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