См. Код ниже, он проверяет, существуют ли данные в таблице, если они не существуют, затем вставьте их или обновите таблицу.
Как вы можете видеть, это выглядит немного беспорядочным – есть ли способ улучшить логику кода или что-то меньшее? У меня есть несколько таблиц, которые нужно делать то же самое.
foreach ($sheet as $data) { // Get Phone ID $dataPhoneID = mysql_escape_string($data['handset']['phone_id']); if (isset($stocks[$dataPhoneID])) { $stockPhone = $stocks[$dataPhoneID ]; $phoneName = mysql_escape_string($stockPhone['description']); $stock = mysql_escape_string($stockPhone['stock']); $SQL = "SELECT * FROM phone_affiliate WHERE affiliate_id = 1 AND affiliate_phone_id = '$dataPhoneID'"; $q = mysql_query($SQL); if (mysql_num_rows($q) == 0) { $SQLInsert = "INSERT INTO phone (name) VALUE('$phoneName')"; if (mysql_query($SQLInsert)) { $phone_id = mysql_insert_id(); $SQLInsert = "INSERT INTO phone_affiliate (phone_id, affiliate_id, affiliate_phone_id, stock) "; $SQLInsert .= "VALUE('$phone_id', '1', '$dataPhoneID', '$stock')"; mysql_query($SQLInsert) or die(mysql_error()); } } else { $row = mysql_fetch_assoc($q); $phone_id = $row['phone_id']; $SQLUpdate = "UPDATE phone_affiliate set stock = '$stock' WHERE affiliate_id = 1 AND phone_id = $phone_id"; mysql_query($SQLUpdate) or die(mysql_error()); } // Similar code block above for other tables. } }
Примечание. Я знаю о PDO, но у меня нет времени заменить его на существующую систему.
Использовать mysql REPLACE INTO или INSERT … НА ОБНОВЛЕНИИ КЛЮЧА DUPLICATE . Например:
foreach ($sheet as $data) { // Get Phone ID $dataPhoneID = mysql_escape_string($data['handset']['phone_id']); if (isset($stocks[$dataPhoneID])) { $stockPhone = $stocks[$dataPhoneID ]; $phoneName = mysql_escape_string($stockPhone['description']); $stock = mysql_escape_string($stockPhone['stock']); $SQLInsert = "INSERT INTO phone_affiliate (affiliate_id, affiliate_phone_id, stock) "; $SQLInsert .= "VALUES ('1', '$dataPhoneID', '$stock') "; $SQLInsert .= "ON DUPLICATE KEY UPDATE stock = '$stock'"; mysql_query($SQLInsert); if (mysql_insert_id()) { $SQLInsert = "INSERT INTO phone (name) VALUE('$phoneName')"; mysql_query($SQLInsert); $phone_id = mysql_insert_id(); $SQLUpdate = "UPDATE phone_affiliate set phone_id = $phone_id WHERE affiliate_id = 1 AND affiliate_phone_id = $dataPhoneID_id"; } } }
Также вы можете использовать конструкцию INSERT IGNORE