Модераторы: skyboy
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Подсчитать одинаковые вставки 
:(
    Опции темы
elCreator
Дата 25.1.2009, 03:37 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.7.2007

Репутация: нет
Всего: -1



В таблицу периодически вставляются записи вида string_a, string_b, string_c, num_d, где первые три строковых переменных могут быть какими угодно, и повторяться в любых комбинациях сколько угодно раз.
Необходимо при вставке записи, в случае если в таблице существует запись с такими же точно string_a И string_b И string_c увеличить на 1 значение num_d, а саму строку повторно не вставлять.
Желательно сделать это с минимальной нагрузкой (PHP+MySQL), как поступить в таком случае? Таблица пока что не существует, поэтому рассматриваются любые варианты.

Это сообщение отредактировал(а) elCreator - 25.1.2009, 03:53
PM WWW ICQ   Вверх
skyboy
Дата 25.1.2009, 12:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



покажи на примере.
в голову пришло использование unique key и insert into .... on duplicate key update ...
но я не уверен, что правильно понял вопрос.
PM MAIL   Вверх
elCreator
Дата 25.1.2009, 16:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.7.2007

Репутация: нет
Всего: -1



Пример:

Иванов   |Иван     |Иванович     |1
Петров   |Сергей |Викторович  |1
Сидоров |Иван     |Иванович     |1
Иванов   |Иван     |Сергеевич   |1

Приходят данные "Иванов   |Иван     |Иванович". Нам нужно вместо того чтобы вставлять их в таблицу, просто обновить значение в уже имеющейся соответствующей строке:

Иванов   |Иван     |Иванович     |2
Петров   |Сергей |Викторович  |1
Сидоров |Иван     |Иванович     |1
Иванов   |Иван     |Сергеевич   |1

Есть ли способ поизящнее чем q="SELECT * FROM table WHERE a='Иванов',b='Иван',c='Иванович'";
...
if (mysql_result($q) !=""){
$q="INSERT INTO table ...."
} else{
$q="UPDATE table ...."
}

Это сообщение отредактировал(а) elCreator - 25.1.2009, 16:18
PM WWW ICQ   Вверх
skyboy
Дата 25.1.2009, 17:44 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


неОпытный
****


Профиль
Группа: Модератор
Сообщений: 9820
Регистрация: 18.5.2006
Где: Днепропетровск

Репутация: 15
Всего: 260



Цитата(elCreator @  25.1.2009,  15:16 Найти цитируемый пост)
Есть ли способ поизящнее чем q="SELECT * FROM table WHERE a='Иванов',b='Иван',c='Иванович'";

да.  insert into .... on duplicate key update ...
только надо создать уникальный индекс по имя+фамилия+отчество.
PM MAIL   Вверх
elCreator
Дата 25.1.2009, 18:36 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 52
Регистрация: 21.7.2007

Репутация: нет
Всего: -1



А что лучше в качестве такого ключа - какой-нибудь хеш (если да то какой, при том что крайне нежелательно повторить унивальный ключ для разных записей), или же просто конкатенцию значений вставляемых трех полей? а потом те же значения записывать в соответствующие поля - получается дублирование информации...
PM WWW ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Составление SQL-запросов | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.