2012-08-29 53 views
1

我正在運行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?)sred作爲結果。

仍然無能爲力。

+1

有你嘗試通過刪除substring_index函數,即簡單地使用group_concat函數? – Shubhansh

+0

hm。有沒有另外一種方法來限制什麼才能進入GROUP_CONCAT呢?如果可能的話,我只包含TOP 20發生的尺寸/顏色,而不是將GROUP_CONCAT限制爲10/16的結果 – frequent

+0

您是以什麼標準定義TOP 20? – Shubhansh

回答

3

您可以使用查詢中使用GROUP_CONCAT along with ORDER BY CLAUSE如下,

注意:你需要根據自己的需要

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 

希望它可以幫助下面的查詢來定義標準...

+0

很酷。嘗試這一點。非常感謝! – frequent

+0

hm。 MySQL正在抱怨'無效使用GROUP函數' – frequent

+0

你在填寫什麼標準? – Shubhansh