Как ОБНОВИТЬ или ВСТАВИТЬ на основе нескольких столбцов, возвращающих одни и те же данные, без доступа к уникальному идентификатору - PullRequest
0 голосов
/ 04 ноября 2019

У меня есть таблица данных о доступности парка отдыха, примером которой является:

<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'],
                    )
                );
            }
        }

1 Ответ

0 голосов
/ 04 ноября 2019

Хотите обновить таблицу SQL? Затем вы можете сделать это с помощью оператора SQL, например:

INSERT INTO table_name (id, sites_available, price) VALUES(1, "2", 3) ON DUPLICATE KEY UPDATE sites_available="2", price=3;

http://www.mysqltutorial.org/mysql-insert-or-update-on-duplicate-key-update/

Если вы хотите проверить, существует ли уже запись в HTML-таблице: лучше всего будет, если вызапишите все данные в массив один раз и проверьте, существует ли ключ массива.

С уважением, Том

...