Artem_Paris
Новичок
Есть таблица sports, в которую я записываю спорт и страну.
А функции getId() я должен записать передаваемые данные в базу и вернуть id.
Но перед записью, нужно проверить наличие этой записи в базе, и если она там есть, то не записывать и вернуть просто id.
Вроде бы ничего сложного, делаю по самому простому, но самому долгому способу:
в базе:
UNIQUE KEY `id` (`id`),
KEY `sport` (`sport`),
KEY `country` (`country`)
Если в массиве несколько десятков тысяч ключей, то запись происходит очень долго и в итоге зависает. помогите добиться нужного результата более быстрым способом.
Спасибо
Код:
$sport_list[] = array('sport'=>'russia', 'country'=>'football');
$sport_list[] = array('sport'=>'russia', 'country'=>'boxing');
$sport_list[] = array('sport'=>'russia', 'country'=>'tennis');
$sport_list[] = array('sport'=>'russia', 'country'=>'football');
foreach($sport_list as $sport)
{
$sport_id = getId($sport);
......
}
Но перед записью, нужно проверить наличие этой записи в базе, и если она там есть, то не записывать и вернуть просто id.
Вроде бы ничего сложного, делаю по самому простому, но самому долгому способу:
Код:
function getId($data)
{
$res = $db->query("select id from sports where sport='{$data['sport']}' and country='{$data['country']}'");
if($db->num_rows($res) == 0)
{
$sql = $db->query("INSERT INTO `sports` (`sport`, `country`) VALUES ('{$data['sport']}', '{$data['country']}')");
$result = $db->query("select LAST_INSERT_ID() AS 'id'");
$row = $db->fetch_row($result);
return $row[0]['id'];
}
else
{
$row = $db->fetch_row($res);
return $row[0]['id'];
}
}
UNIQUE KEY `id` (`id`),
KEY `sport` (`sport`),
KEY `country` (`country`)
Если в массиве несколько десятков тысяч ключей, то запись происходит очень долго и в итоге зависает. помогите добиться нужного результата более быстрым способом.
Спасибо