2015-05-27 54 views
0

我有一個問題,因爲我想填充table_B基於從table_A檢索的行。有沒有辦法在mysql_fetch_row()循環內發出下一個(如INSERT)mysql語句?

if (mysql_query(conn,"Select X,Y,Z from table_A;")) { 
     die_mysql_err(); 
} 
else 
{ 
    res = mysql_use_result(conn); 
    while ((row = mysql_fetch_row(res)) != NULL) { 

      >> HERE I would like to INSERT some data into the table_B. 
    } 
    mysql_free_result(res); 
} 

的錯誤信息是:

Commands out of sync; you can't run this command now 

我理解的消息,但不知道什麼是最好的解決辦法..

  • 我應該建立另一個連接?那麼時間/速度和資源呢?
  • 我可以用mysql_store_result()函數解決嗎?

這兩個表都在同一個數據庫中。

+0

做你的抓取,緩存到數據結構,然後在提取查詢已關閉後分別運行插入? –

+0

這是解決方案之一。但尋找像存儲結果集類的堆棧,可能是mysql_store_result()做的伎倆,但找不到任何示例如何做到這一點... –

回答

1

你問:

我應該建立另一個連接?

是的,你可以這樣做。

那麼時間/速度和資源呢?

不錯,只要你不關閉並重新打開每一行的第二個連接。

我可以用mysql_store_result()函數解決嗎?

你也可以遍歷你的第一個結果集,並存儲在內存陣列中的所有結果,然後再釋放它,則數組做你插入了循環。

你認爲你可以做這種事情嗎?

INSERT INTO Table_B (x, y, z, a) 
SELECT x,y,z, x+y+z AS a 
    FROM table_a 

如果您對錶a的行所需的計算可以在SQL中表示,您可以在單個查詢中執行此操作。

+0

所以它似乎(從兩個答案)唯一的方法是建立一個臨時數組/列表/隊列等... –

相關問題