![](/img/trans.png)
[英]MySQL Update one table, but use data from two other tables as part of the update
[英]Attempt to update one mySQL table with data from two other tables is failing
我正在嘗試更新一個表,該表包含我的員工輸入的數據。 該表包含三列:條目ID,字段ID和值。 我想確保根據每個條目在此表中的每個字段都有一行。 因此,我編寫了以下php / sql腳本。 思考過程是獲得兩個數組(一個包含條目ID,另一個包含字段ID),並檢查輸入表以查看每個字段和條目是否存在現有行。 如果不是,則使用inert into命令添加值為0的行,但是此命令失敗。 我的猜測是由於此功能的強度導致超時錯誤。 有什么建議么?
$db = JFactory::getDBO(); $field_query = 'SELECT id FROM `jos_directory_field`'; $db->setQuery( $field_query ); $fields = $db->loadObjectList(); $entry_query = 'SELECT id FROM `jos_directory_entry`'; $db->setQuery( $entry_query ); $entries = $db->loadObjectList(); for($e=0;$e count($entries);$e++) { for($i=0;$i count($fields);$i++) { $insert_query = 'INSERT INTO `jos_directory_enf` (entry_id,field_id,field_value)'; $insert_query .= 'SELECT '.$entries[$e]->id.','.$fields[$i]->id.',0'; $insert_query .= 'FROM dual WHERE NOT EXISTS (SELECT * FROM `jos_directory_enf`'; $insert_query .= 'WHERE entry_id = '.$entries[$e]->id.' and field_id = '.$fields[$i]->id.')'; $db->setQuery( $insert_query ); $db->query(); } }
太糟糕了,Joomla似乎不支持准備好的語句,因為它們可以幫助提高重復查詢的性能。
但是,在這種情況下,有一個更好的選擇。 您應該能夠使用單個SQL語句替換PHP代碼,並對INSERT語句使用IGNORE
子句。 首先,確保你有一個唯一索引上entry_id
和field_id
列jos_directory_enf
。 然后,SQL語句將類似於:
INSERT IGNORE INTO `jos_directory_enf` (entry_id,field_id,field_value)
SELECT e.id, f.id, 0
FROM jos_directory_entries AS e
JOIN jos_directory_field AS f
;
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.