У меня есть таблица данных о доступности парка отдыха, примером которой является:
<table>
<thead>
<tr>
<th>id</th>
<th>api_key</th>
<th>date</th>
<th>category_id</th>
<th>sites_available</th>
<th>price</th>
</tr>
</thead>
<tbody>
<tr>
<td>1</td>
<td>asfe4t4gs</td>
<td>2019-11-08</td>
<td>1</td>
<td>2</td>
<td>100</td>
</tr>
<tr>
<td>2</td>
<td>ydfhswre3354</td>
<td>2019-12-08</td>
<td>2</td>
<td>3</td>
<td>150</td>
</tr>
</thead>
</table>
Проблема, с которой я столкнулся, заключается в том, что мы отправляем JSON-результат данных для обновления или вставки в эту таблицу. Необходимо проверить, есть ли api_key, date и category_id уже в таблице, и обновить их другими полями (price и sites_available), в противном случае необходимо вставить их как новые записи.
Это плагин Wordpress.
Мы попытались зациклить все это и определить, существует ли он или нет, но из-за объема передаваемых данных он был слишком медленным и из-за превышения времени (тысячи записей). Мы также попытались использовать метод $ wpdb-> replace, однако он, похоже, не работает, так как добавляет новые записи каждый раз.
foreach ($result['categories'] as $category) {
if (empty($category['category_id']))
throw new Exception('category_id is empty');
if (empty($category['dates']))
throw new Exception('dates is empty');
foreach ($category['dates'] as $date) {
if(empty($date['date']))
throw new Exception('date is empty');
$wpdb->replace(
$availability_table_name,
array(
"sites_available" => $date['sites_available'],
"price" => $date['price'],
'api_key' => $result['api_key'],
'instance_id' => $result['instance_id'],
'category_id' => $category['category_id'],
"date_availability" => $date['date'],
)
);
}
}