Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Скриптовые языки программирования > PHP
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.04.2012, 17:56   #1
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию хранение e-mail адресов

у меня есть 20000 е-mail адресов, которые я собираюсь хранить в БД - это основная база.

если пользователь добавляет одновременно 1000 своих адресов, мне нужно сохранить только те из них, которых нет в основной базе.

сделать уникальное поле для адресов нельзя, потому что если другой пользователь захочет добавить 1000 своих адресов, они также сравниваются с основной базой, но у первого и второго пользователя базы не зависят друг от друга, то есть одинаковые адреса могут быть.

пока что в голову приходит создать две таблицы - одна для основной базы, другая для пользовательских баз... но делать 1000 обращений к основной базе для сравнения с 20000 адресами, а потом еще 1000 обращений для записи в пользовательскую базу не кажется мне привлекательным.

кто подскажет, как лучше поступить, чтоб снизить нагрузку на mysql?
Mortimoro вне форума Ответить с цитированием
Старый 19.04.2012, 18:07   #2
ssdm
Форумчанин
 
Регистрация: 20.05.2009
Сообщений: 506
По умолчанию

Сделайте уникальное поле по userId + e-mail.
ssdm вне форума Ответить с цитированием
Старый 19.04.2012, 18:47   #3
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

но ведь это все равно позволит мне добавить e-mail с userId, отличным от базового... то есть сравнение все равно придется производить перед добавлением в базу.
Mortimoro вне форума Ответить с цитированием
Старый 19.04.2012, 18:55   #4
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

переберайте циклом
Кольша вне форума Ответить с цитированием
Старый 19.04.2012, 19:01   #5
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Mortimoro Посмотреть сообщение
но ведь это все равно позволит мне добавить e-mail с userId, отличным от базового... то есть сравнение все равно придется производить перед добавлением в базу.
Что есть "базовый userId" у вас?
Пользователи добавляют новые адреса в основную базу(таблицу) - или в отдельную? Как эта таблица связана с основной?
Как часто будет происходить добавление адресов?
Как скоро после добавления адреса будут нужны для использования?
Andkorol вне форума Ответить с цитированием
Старый 19.04.2012, 19:07   #6
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Код:
$massive=array("1@mail.ru","2@mail.ru",.........,"1000@mail.ru");

foreach($massive as $mail){
      $sql="SELECT `mail` FROM `table` WHERE `mail`=$mail LIMIT 1"; 
//в цикле 1000 итераций, следовательно я все равно делаю 1000 запросов только чтоб узнать есть такое значение или нет... 
//и если таких значений нет, я делаю еще 1000 раз INSERT
}
Mortimoro вне форума Ответить с цитированием
Старый 19.04.2012, 19:15   #7
Mortimoro
Форумчанин
 
Регистрация: 03.12.2010
Сообщений: 334
По умолчанию

Andkorol, базовый id будет если делать так, как предлагает ssdm. Базовые адреса будут с одним id, а пользовательские с ихними id.

Вот я как раз и пытаюсь выяснить, как лучше - общую базу держать или раздельные. Как связана с основной, описал в первом посте.

Добавления будут происходить не часто, максимум раз в неделю на каждого пользователя, но пользователей около 500... не у каждого есть своя база, не каждый добавит 1000 адресов, но некоторые пользователи могут добавлять до 1000.

Адреса будут нужны каждый день, на них ежедневно рассылаются уведомления.
Mortimoro вне форума Ответить с цитированием
Старый 19.04.2012, 19:24   #8
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Mortimoro Посмотреть сообщение
Адреса будут нужны каждый день, на них ежедневно рассылаются уведомления.
Рассылка будет вестись одна общая - или каждый пользователь будет иметь собственную рассылку, только по своим адресам (или только по своим + базовые)?
Andkorol вне форума Ответить с цитированием
Старый 19.04.2012, 19:25   #9
Кольша
Далеко не
Участник клуба
 
Аватар для Кольша
 
Регистрация: 11.08.2011
Сообщений: 1,512
По умолчанию

можно сделать самым тупым образом получитьй все email в переменную типа string и проверить strpos'ом, недостаток этого метода в том что vasya@mail.ru не добавиться если есть vvasya@mail.ru
Кольша вне форума Ответить с цитированием
Старый 19.04.2012, 19:28   #10
Andkorol
Старожил
 
Регистрация: 31.05.2010
Сообщений: 3,301
По умолчанию

Цитата:
Сообщение от Кольша Посмотреть сообщение
можно сделать самым тупым образом ...
На редкость верное определение предложенного способа...
Уж простите.
Andkorol вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Ищу прогу для сбора mail-адресов. Bux2012 Помощь студентам 4 17.04.2012 15:06