2016-10-03 95 views
-2

我一直在尋找一種方法將此查詢/ php轉換爲INSERT INTO SELECT,但我無法找到將值添加到查詢的concat部分的方法,任何建議將concat sql字符串轉換爲INSERT INTO SELECT

$query = tep_db_query("SELECT DISTINCT products_attributes.products_id AS products_id, GROUP_CONCAT(DISTINCT 'filter_size_', products_attributes.options_id, '_', filter_options.filter_options_id) AS size FROM products_attributes INNER JOIN filter_options_to_values ON products_attributes.options_id = filter_options_to_values.options_id AND products_attributes.options_values_id = filter_options_to_values.values_id INNER JOIN filter_options ON filter_options_to_values.filter_options_id = filter_options.filter_options_id GROUP BY products_attributes.products_id;"); 
tep_db_query("TRUNCATE table " . $tableName); 

while ($row = mysqli_fetch_array($query, MYSQLI_ASSOC)) { 
    $array = explode(',', $row['size']); 
    $count = count($array); 
    $string = ''; 
    foreach ($array as $a) { 
     $string .= '1,'; 
    } 
    $string = rtrim($string, ','); 

    tep_db_query("INSERT INTO " . $tableName . " (products_id, " . $row['size'] . ") VALUES (" . $row['products_id'] . ", " . $string . ")"); 
} 

這是我努力的INSERT INTO但問題是dynimic的cols大小:

SELECT DISTINCT products_attributes.products_id, filter_options_to_values.filter_options_id, GROUP_CONCAT(DISTINCT 'filter_size_', products_attributes.options_id, '_', filter_options.filter_options_id) AS size, GROUP_CONCAT(DISTINCT '1') AS vals FROM products_attributes INNER JOIN filter_options_to_values ON products_attributes.options_id = filter_options_to_values.options_id AND products_attributes.options_values_id = filter_options_to_values.values_id INNER JOIN filter_options ON filter_options_to_values.filter_options_id = filter_options.filter_options_id WHERE products_attributes.options_quantity > 0 GROUP BY products_attributes.products_id

這是架構:

CREATE TABLE products_temp ( products_id int(11) NOT NULL default '0', final_price decimal(15,4) default NULL, decimal(15,4) default NULL, special_price manufacturers_id int(11) default NULL, efv4 int(11) default NULL, efv5 int(11) default NULL, efv10 int(11) default NULL, products_date_added datetime default NULL, filter_size_2_1 int(11) default NULL, filter_size_2_2 int(11) default NULL, filter_size_2_3 int(11) default NULL, filter_size_2_4 int(11) default NULL, filter_size_2_5 int(11) default NULL, filter_size_2_6 int(11) default NULL, filter_size_2_7 int(11) default NULL, filter_size_2_8 int(11) default NULL, filter_size_2_9 int(11) default NULL, filter_size_2_10 int(11) default NULL, filter_size_2_11 int(11) default NULL, filter_size_2_12 int(11) default NULL, filter_size_2_57 int(11) default NULL, filter_size_2_58 int(11) default NULL, filter_size_2_59 int(11) default NULL, filter_size_2_60 int(11) default NULL, filter_size_2_62 int(11) default NULL, filter_size_2_63 int(11) default NULL, filter_size_2_293 int(11) default NULL, filter_size_2_294 int(11) default NULL, filter_size_2_295 int(11) default NULL, filter_size_2_296 int(11) default NULL, filter_size_9_20 int(11) default NULL, filter_size_9_21 int(11) default NULL, filter_size_9_24 int(11) default NULL, filter_size_9_25 int(11) default NULL, filter_size_9_26 int(11) default NULL, filter_size_9_27 int(11) default NULL, filter_size_9_28 int(11) default NULL, filter_size_9_29 int(11) default NULL, filter_size_9_30 int(11) default NULL, filter_size_9_31 int(11) default NULL, filter_size_9_3 2 int(11) default NULL, filter_size_9_33 int(11) default NULL, filter_size_9_34 int(11) default NULL, filter_size_9_35 int(11) default NULL, filter_size_9_36 int(11) default NULL, filter_size_9_37 int(11) default NULL, filter_size_9_38 int(11) default NULL, filter_size_9_39 int(11) default NULL, filter_size_9_40 int(11) default NULL, filter_size_9_41 int(11) default NULL, filter_size_9_42 int(11) default NULL, filter_size_9_43 int(11) default NULL, filter_size_9_44 int(11) default NULL, filter_size_9_45 int(11) default NULL, filter_size_9_46 int(11) default NULL, filter_size_9_47 int(11) default NULL, filter_size_9_48 int(11) default NULL, filter_size_9_49 int(11) default NULL, filter_size_9_50 int(11) default NULL, filter_size_9_51 int(11) default NULL, filter_size_9_52 int(11) default NULL, filter_size_9_53 int(11) default NULL, filter_size_9_54 int(11) default NULL, filter_size_9_55 int(11) default NULL, filter_size_9_56 int(11) default NULL, PRIMARY KEY ( products_id ) ) ENGINE=MyISAM DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

+0

的代碼是一點點不清楚。你能提供一些樣本數據和你想要的結果嗎?它會幫助我們幫助你。 – Mureinik

回答

0
  1. SELECT語句有4個領域。您嘗試插入的表格的格式爲50.您的SELECT語句要麼需要有50個字段,要麼需要將臨時表格更改爲4個字段以匹配SELECT的結果。我的下注是你的表格模式不是很好,也許這個SELECT的結果是你在表格中實際需要的。

  2. 您在SELECT中包含filter_options_id,以便既可以合併也可以合併到GROUP BY中。否則失敗做將意味着,如果有每個​​您的數據庫中的多個filter_options_id會隨便抓一個隨機filter_options_id在記錄中包括。如果每個​​只有一個不同的filter_options_id,那麼只需將其添加到GROUP BY即可。如果你升級到MySQL 5.7,這個查詢將會出錯。

  3. 在同一查詢中不需要使用DISTINCTGROUP BY。您正在使用GROUP_CONCAT彙總您的一列,因此GROUP BY是正確的選擇。在SELECT之後刪除DISTINCT

  4. GROUP_CONCAT(DISTINCT 1) as vals相同,只是1 as vals

我唯一的其他想法是,也許你要針對PIVOT查詢來填補你的表,這也許是爲什麼被一個GROUP_CONCAT後。 Check out this question for information on how to pull that off.