簡體   English   中英

如何選擇MySQL子查詢中的所有不同值為group_concat?

[英]How to select all distinct values in a MySQL subquery into a group_concat?

我正在運行MySQL 5.0.88並進行搜索,我正在運行presearch搜索以確定number of records min-max values以及element strings of distinct values

查詢結果如下所示:

  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 sizesGROUP_CONCAT與記錄集的所有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

我刪除了第3個表(貨幣查詢/ 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。 但是我只得到(任意?) sred作為結果。

仍然無能為力。

您可以使用GROUP_CONCAT和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

希望能幫助到你...

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM