簡體   English   中英

嘗試用其他兩個表中的數據更新一個mySQL表失敗

[英]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_idfield_idjos_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM