2013-01-07 84 views
0

我的查詢是:轉換一個MySQL查詢的結果爲一個字符串

$orderitemsattributes_query = "SELECT products_options_values 
FROM orders_products_attributes oa 
WHERE oa.orders_id 
IN (
SELECT DISTINCT o.orders_id 
FROM orders o 
WHERE o.exported =  '0' 
AND o.orders_id >  '0')"; 
$orderitemsattributes_result = mysql_query($orderitemsattributes_query); 
while($row = mysql_fetch_array($orderitemsattributes_result)) { 

echo $row['products_options_values']; 
} 

給了我下面的:

6 period day (TP6)NavyGold (j)Gold Lamé (17)LJD1 at back (free) 

我希望能夠將其轉換爲一個字符串,用於插入數據庫上的另一個字段。

我想:

$tradebox_attributes_list = implode (',', $row);` 

但我要麼沒有得到任何東西,或者我得到取決於存儲在$ tradebox_attributes_list不完整的結果,其中我把破滅。

我需要能夠沿着代碼進一步讀取這個變量,並在關閉之後很好地}。

表結構是:

CREATE TABLE IF NOT EXISTS `orders_products_attributes` (
    `orders_products_attributes_id` int(11) NOT NULL AUTO_INCREMENT, 
    `orders_id` int(11) NOT NULL DEFAULT '0', 
    `orders_products_id` int(11) NOT NULL DEFAULT '0', 
    `products_options` varchar(32) NOT NULL DEFAULT '', 
    `products_options_values` text NOT NULL, 
    `options_values_price` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `price_prefix` char(1) NOT NULL DEFAULT '', 
    `product_attribute_is_free` tinyint(1) NOT NULL DEFAULT '0', 
    `products_attributes_weight` float NOT NULL DEFAULT '0', 
    `products_attributes_weight_prefix` char(1) NOT NULL DEFAULT '', 
    `attributes_discounted` tinyint(1) NOT NULL DEFAULT '1', 
    `attributes_price_base_included` tinyint(1) NOT NULL DEFAULT '1', 
    `attributes_price_onetime` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_price_factor` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_price_factor_offset` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_price_factor_onetime` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_price_factor_onetime_offset` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_qty_prices` text, 
    `attributes_qty_prices_onetime` text, 
    `attributes_price_words` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_price_words_free` int(4) NOT NULL DEFAULT '0', 
    `attributes_price_letters` decimal(15,4) NOT NULL DEFAULT '0.0000', 
    `attributes_price_letters_free` int(4) NOT NULL DEFAULT '0', 
    `products_options_id` int(11) NOT NULL DEFAULT '0', 
    `products_options_values_id` int(11) NOT NULL DEFAULT '0', 
    `products_prid` tinytext NOT NULL, 
    `tradebox_attributes_list` text NOT NULL, 
    PRIMARY KEY (`orders_products_attributes_id`), 
    KEY `idx_orders_id_prod_id_zen` (`orders_id`,`orders_products_id`) 
) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=77065 ; 

Sample of one entry is: 


(76569, 22959, 34813, 'Lesson format', '6 period day (TP6)', 0.0000, '+', 1, 0, '+', 1, 1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '', '', 0.0000, 0, 0.0000, 0, 5, 55, '30:499bc45895cd0baaef055a57cb36df5d', ''), 
(76570, 22959, 34813, 'Cover', 'Navy', 0.0000, '+', 1, 0, '+', 1, 1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '', '', 0.0000, 0, 0.0000, 0, 1, 2, '30:499bc45895cd0baaef055a57cb36df5d', '1 at back (free)'), 
(76571, 22959, 34813, 'Wire', 'Gold (j)', 0.0000, '', 1, 0, '', 1, 1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '', '', 0.0000, 0, 0.0000, 0, 4, 49, '30:499bc45895cd0baaef055a57cb36df5d', ''), 
(76572, 22959, 34813, 'Ribbon', 'Gold Lamé (17)', 0.0000, '+', 1, 0, '+', 1, 1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '', '', 0.0000, 0, 0.0000, 0, 3, 29, '30:499bc45895cd0baaef055a57cb36df5d', ''), 
(76573, 22959, 34813, 'Initials (Max 4)', 'LJD', 3.3000, '+', 1, 0, '+', 1, 1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '', '', 0.0000, 0, 0.0000, 0, 2, 0, '30:499bc45895cd0baaef055a57cb36df5d', ''), 
(76574, 22959, 34813, 'Plastic pockets', '1 at back (free)', 0.0000, '+', 1, 0, '+', 1, 1, 0.0000, 0.0000, 0.0000, 0.0000, 0.0000, '', '', 0.0000, 0, 0.0000, 0, 6, 84, '30:499bc45895cd0baaef055a57cb36df5d', ''), 

我需要能夠採取一切存儲在products_options_values場的結果(注意,有六隻爲這個順序),並將其作爲一個逗號分隔的列表tradebox_attributes_list字段。

編輯爲要求是新換的:

我對在作品中拋出一個扳手現在。 group_concat()會工作,但我剛剛被要求在單獨的行上顯示其中一個屬性。舉例來說,我們希望以下內容: 6期一天,海軍,1背部(免費)NEW LINE LJD£3.30

並非如此,現在,我需要選擇特定的products_options_values,然後在單獨的行簡單,請從options_values_price字段中選擇不同的選項並關聯價格。

+1

有壞設計的氣味 - 爲什麼你會將記錄加入到一個字符串中,並將它們存儲在數據庫的另一個地方?規範你的模式並使用'JOIN's。 – moonwave99

+0

@StevePrice是你的上述查詢的輸出嗎? '6週日(TP6)海軍黃金(j)金拉米(17)LJD1後面(免費)'不應該排成幾行?然後你可以使用'group_concat'。或者你說你想用','來分割它? – bonCodigo

+0

@bonCodigo是的,需要一個由 –

回答

0

你可以用group_concat()來得到值組:order id。希望我們可以看到表雖然..

SELECT group_concat(products_options_values) 
FROM orders_products_attributes oa 
WHERE oa.orders_id 
IN (
SELECT DISTINCT o.orders_id 
FROM orders o 
WHERE o.exported = '0' 
AND o.orders_id > '0') 
group by oa.orders_id; 
相關問題