выполнить математические расчеты для всех данных в базе данных sql отправить результат в базу данных в php - PullRequest
0 голосов
/ 06 августа 2020

Я хотел бы получить данные из моей базы данных 2 sql, выполнить некоторые математические вычисления и опубликовать результат в базе данных, скажем, моя таблица1 такая

+---+---+----------------------------+
| A | B |             C              |
+---+---+----------------------------+
| 2 | 9 | result from A*B*D*E in php |
| 1 | 8 | result from A*B*D*E in php |
| 4 | 7 | result from A*B*D*E in php |
| 3 | 6 | result from A*B*D*E in php |
| 6 | 5 | result from A*B*D*E in php |
| 6 | 5 | result from A*B*D*E in php |
| 5 | 4 | result from A*B*D*E in php |
+---+---+----------------------------+

, а моя таблица2 такая

+---+----+
| D | E  |
+---+----+
| 1 | 9  |
| 2 | 7  |
| 3 | 8  |
| 4 | 6  |
| 5 | 5  |
| 6 | 3  |
| 7 | 2  |
+---+----+

до сих пор то, что я сделал

  // database connection
  include_once("config.php");

  // Query
  $query = mysqli_query($conn, "SELECT * FROM table1");
  $query2 = mysqli_query($conn, "SELECT * FROM table2");


  //Source1      
  while($user_data1 = mysqli_fetch_array($query)) 
  {
     $A[] = $user_data1['A'];
     $B[] = $user_data1['B'];
  }
    
  //Source2
  while($user_data2 = mysqli_fetch_array($query2)) 
  {
    $D[] = $user_data2['D'];
    $E[] = $user_data2['E'];
  }
  foreach (array_combine($A, $B) as $ValueA=> $ValueB)
  {
    foreach (array_combine($D, $E) as $ValueD=> $ValueE)
    {
      $result1 = $ValueA*$ValueB*ValueD*ValueE;
      $val = 0.123;
      $result2[] = $result1*$val;
    }    
    $final result = min($result2);
    echo round($final result, 2);
    unset($result2);
  }

Я не вставил базу данных, но все еще повторяет отладку, если математика верна, этот код обнаружил некоторую ошибку, например, используя моя база данных окончательный результат только эхо / показывает 6 математических результатов, потому что в таблице 1 строки 5 и 6 имеют те же данные, кстати, конечно, в моей таблице 1 и 2 есть первичный ключ

Ответы [ 2 ]

0 голосов
/ 06 августа 2020

Просто для моего понимания: вы хотите вычислить значение для своих расчетов, вам нужны данные из таблицы 1, которая ясна, но также из таблицы2 Но какие? Я думаю, вы хотите использовать данные из одной и той же строки (так, строка 1 из таблицы 1 и строка 1 из таблицы 2, строка 2 из таблицы 1 и строка 2 из таблицы 2), верно? Теперь у вас есть проблема, потому что когда вы делаете select * from table, вы не знаете, в каком порядке они возвращают данные из вашей базы данных. В большинстве случаев это может быть тот же порядок, который вы ввели, но нет гарантии ie. Вы сказали, что у вас есть первичный ключ для каждой таблицы, как вы их определили? Думаю, у вас может быть столбец идентификатора, поэтому вы можете присоединиться к своей таблице по этому идентификатору?

0 голосов
/ 06 августа 2020

Для замены C в этом случае даже не нужно PHP. Чтобы ОБНОВИТЬ значение в MySQL с несколькими таблицами, просто добавьте их с , при выборе таблиц, например:

UPDATE table1,table2 SET C = table1.A * table1.B * table2.D * table2.E WHERE C IS NULL;

Выполнение этого кода один раз обновит все строки, чтобы C = A*B*D*E как требуется, если C еще не установлен или NULL. Если вы хотите обновить все строки, вы можете просто удалить условие WHERE

Примечание. Иногда (по крайней мере, для меня) SQL выдает предупреждение, если в запросе SQL нет условия WHERE. Чтобы обойти это, просто добавьте в конце WHERE 1=1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...