Можно ли как то сделать из этого кода не 2 запроса, а один? REPLACE, ON DUPLICATE KEY тут могут помочь или нет? Код (PHP): // функция гостей профиля if (is_numeric($_GET['user']) and !$_GET['search']) { $resultUserGuests = mysql_query("SELECT * FROM " . $dbPrefix . "_users_guests WHERE g_user = " . $_GET['user'] . " AND g_guest = " . $user['user_id'] . "", $_DB); $rowUserGuests = mysql_fetch_array($resultUserGuests); $howQueryMySQL = $howQueryMySQL + 1; // для статистики количества запросов в базу if ($rowUserGuests['g_id']) { $resultUserGuests = mysql_query("UPDATE " . $dbPrefix . "_users_guests SET g_date = NOW() WHERE g_id = '" . $rowUserGuests['g_id'] . "'", $_DB); $howQueryMySQL = $howQueryMySQL + 1; // для статистики количества запросов в базу } else { $resultUserGuests = mysql_query("INSERT INTO " . $dbPrefix . "_users_guests (g_user, g_guest) VALUES ('" . $_GET['user'] . "','" . $user['user_id'] . "')", $_DB); $howQueryMySQL = $howQueryMySQL + 1; // для статистики количества запросов в базу } } // функция гостей профиля
Если в таблице users_guests есть запись где поле A = 1 и поле B = 2 то Update поля C иначе Insert в поля A и B. Как реализовать одним запросом? Спасибо.
Я не могу понять как составить запрос правильно, выше посмотрите что нужна выборка по двум полям и вставка от обновления отличаются по полям.
REPLACE INTO TABLE (A,B,C) VALUES (1,2,3). Где A твой g_id .... INSERT INTO TABLE (A,B,C) VALUES (1,2,3) ON DUPLICATE KEY UPDATE g_date = NOW() .... Ну как-то так
$_GET['user'] - это номер гостя $user['user_id'] - это номер пользователя Записей несколько тысяч. Каким образом мне делать выборку записи?
Сочетание пары: номер гостя и номер пользователя уникальны в таблице? Если сделать их уникальными то при insert (номер гостя, номер пользователя) сработает duplicate если пара уже есть
Мне не интересен кусок вашей таблицы, я интересовался: пара (g_user, g_guest) уникальна во всех записях? Судя по куску : да. Вот и никто не мешает сделать эту пару уникальной и инсертить.. Все зависит от ваших данных, мне они неведомы.
Посмотрите выше код, не ужели не понятно. Входящие данные, это ид пользователей $_GET['user'] - это номер гостя $user['user_id'] - это номер пользователя
ng0d, Вам говорят об индексе UNIQUE по этим полям. http://dev.mysql.com/doc/refman/5.0/en/insert-on-duplicate.html - в первых же строчках:
Для примера возьмем кусок скриншота из таблицы (10 пост ng0d). На скриншоте первая строка Код (Text): g_user: 17, g_guest: 1 Например я беру и делаю ALTER TABLE TABLE ADD UNIQUE(g_user,g_guest) И если я попытаюсь сделать: INSERT INTO TABLE (g_user,g_guest) VALUES (17,1) то получу информацию о том, что подобная запись уже существует: Duplicate entry. Грубо говоря попыткой сделать INSERT ... ON DUPLICATE KEY UPDATE ... существующих данных, на основе уникального индекса двух полей, мы делаем SELECT UPDATE или INSERT одним запросом.