0

私のクエリは次のとおりです。

$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 フィールドに保存されているすべての結果 (この注文だけで 6 つあることに注意してください) を取得し、それらをカンマ区切りのリストとして tradebox_attributes_list フィールドに保存できるようにする必要があります。

要件が変更されたので編集:

私は今、作品にスパナを投げようとしています。group_concat() は機能しますが、属性の 1 つを別の行に表示するように求められました。たとえば、次のものが必要です: 6 日周期、ネイビー、後ろに 1 つ (無料) NEW LINE LJD £3.30

特定の products_options_values を選択する必要があるため、今はそれほど単純ではありません。次に、別の行で別のオプションを選択すると、options_values_price フィールドから関連する価格になります。

4

1 に答える 1

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;
于 2013-01-07T14:53:15.440 に答える