2012-12-31 112 views
0

我使用的是MySQL 5.1.66,我想出了一個選擇查詢來選擇所有男士襯衫及其尺寸和價格。我使用GROUP CONCAT將大小列和價格列從其父級表合併到同一列中。下面是我做GROUP CONCATING multiple rows

SELECT shirts.shirt_name, shirts.men AS main_photo, 
     GROUP_CONCAT(shirt_sizes.size_name,shirt_prices.price) AS sizes 
FROM shirts 
JOIN shirts_link ON shirts_link.shirt_id=shirts.id 
JOIN shirt_sizes ON shirt_sizes.id=shirts_link.size_id 
JOIN shirt_prices ON shirt_prices.id=shirts_link.price_id 
WHERE shirts.men!='' AND shirts_link.adult='y' 
GROUP BY shirts.id 

通過這樣的聲明,是規模列和價格仍然列在select語句一列中兩個獨立的實體?我注意到的另一件事是大小的順序都混在一起了。例如,這是來自其中一列的行

medium29.22,large29.22,1x-large29.22,2x-large30.44,small29.22,3x-large31.70 

爲什麼它不會像小桌面上那樣組織起來?我想如果我想通過PHP將它注入到我們的網站,我想要做的事情是,如果它自動加載,它也將以無組織的方式進行。我怎樣才能解決這個問題?

我在這裏的最終目標是能夠創建一個選擇,可以自動填充我創建的JavaScript應用程序中的每一行。我需要將襯衫名稱,主圖片,每個尺碼和價格加載到我爲他們編碼的div中。如果您需要查看正在使用的實際表格,請告知我們。在此先感謝:)

+1

好吧我只是更新它來顯示,我正在使用MySQL 5.1.66。 – Optiq

回答

1

首先,group_concat函數的目的是保持一個特定列的所有值在一個分組操作。例如,

Table1 
ID field1 field2 
1  ram  science 
2  ramesh maths 
1  ram  maths 

如果你的要求是得到一個特定的人,然後GROUP_CONCAT會產生那麼結果如下科目,

ID field1 field3 
1 ram  science,maths 
2 ramesh maths 

希望這給一些有識之士

+0

我明白這一點。我試圖弄清楚的是,如果我們像2個一樣對2列進行同樣的操作,那麼它們仍然可以通過引用列名稱從單元中調用它們。希望這有助於一些。 – Optiq

+0

是的,他們可以被稱爲。唯一的問題是他們沒有按照正確的順序進入桌子? – Mari

0

試試這個:

SELECT s.shirt_name, s.men AS main_photo, 
     GROUP_CONCAT(CONCAT(ss.size_name, '.', sp.price)) AS sizes 
FROM shirts s 
INNER JOIN shirts_link sl ON sl.shirt_id = s.id 
INNER JOIN shirt_sizes ss ON ss.id = sl.size_id 
INNER JOIN shirt_prices sp ON sp.id = sl.price_id 
WHERE s.men!='' AND sl.adult='y' 
GROUP BY s.id