X   Сообщение сайта
(Сообщение закроется через 3 секунды)



 

Здравствуйте, гость (

| Вход | Регистрация )

Открыть тему
Тема закрыта
> Добавление новых строк в таблицу БД
yuriy_hb
yuriy_hb
Topic Starter сообщение 10.6.2010, 9:31; Ответить: yuriy_hb
Сообщение #1


Здравствуйте, всем!
Подскажите, пожалуйста, столкнулся с акой задачей:
Есть таблица в базе даных, в которой находятся множество строк (около 1 мил.) В нее нужно добавить новую строку. Но при этом, эта добавляемая строка не должна повторятся из строками которые уже находся в БД. Тоисть при добавлении строки нужно учытывать ее сходство (проводить проверку на наличие похожих строк).

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

[PHP]
//Если пользователь впервые посетил личный кабинет заносим все заявки в БД и помечаем как непросмотреные значение - 0
$sqlNew = mysql_query("SELECT * FROM supportState");
$allNewLine = 0;
while ($rowNew = mysql_fetch_assoc($sqlNew))
{
if($rowNew['email'] == $_SESSION['email']) //проверка на сходство пользователя по email
{
$allNewLine = $allNewLine + 1;
}
}
if($allNewLine == 0) {
while ($row_support = mysql_fetch_assoc($ph_add)) {
mysql_query("insert into supportState (request, state, email) values ('$row_support[request]', '0', '$_SESSION[email]')"); }
}
[/PHP]

Может существует более рациоаналный (оптимизированый) способ проводить проверку перед тем, как заносить даные в таблицу БД?:rolleyes:
0
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
RayOfLight
RayOfLight
сообщение 10.6.2010, 10:07; Ответить: RayOfLight
Сообщение #2


Попробуй так:
$email = $_SESSION['email'];
$check=mysql_query("select `email` from supportState where `email`='$email'");
$num = mysql_num_rows($check);

а потом проверяй, равно ли num нулю или нет.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
RayOfLight
RayOfLight
сообщение 10.6.2010, 10:12; Ответить: RayOfLight
Сообщение #3


Конечно, перебор массива из миллиона элементов занимает много времени.
А таким способом ты сразу найдешь в таблице количество записей, у которых email совпадает с тем, который в сессии.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Mulder_hb
Mulder_hb
сообщение 10.6.2010, 10:31; Ответить: Mulder_hb
Сообщение #4


Назначьте столбцу email уникальный ключ и в последующем мускул просто не даст вставить запись со схожим мылом. Правда такой способ не сильно идеален. Если запрос на вставку вернет false, вы не будите знать: ошибка ли это или просто ключ совпадает.
(RayOfLight @ 10.6.2010, 13:07) *
$check=mysql_query("select `email` from supportState where `email`='$email'");
$num = mysql_num_rows($check);

ИМХО, лучше делать так
[php]
$check=mysql_query("SELECT COUNT(`email`) as `total` FROM `supportState` WHERE `email`='$email'");
$check = mysql_fetch_assoc($check);
[/php]
Работает в разы быстрее, особенно будет заметно невооруженным взглядом на столь крупной таблице. А если еще и присвоить email уникальный ключ, то будет вообще летать.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
RayOfLight
RayOfLight
сообщение 10.6.2010, 14:14; Ответить: RayOfLight
Сообщение #5


Mulder, ну или так тоже можно
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Arks
Arks
сообщение 11.6.2010, 8:26; Ответить: Arks
Сообщение #6


Согласен с добавлением поля Primary к таблице - наилучшее средство.
$sqlNew = mysql_query("SELECT * FROM supportState");

Ужасный запрос если миллион записей в таблице, как еще у mysql на такое памяти хватает!



Замечание модератора:
Эта тема была закрыта автоматически ввиду отсутствия активности в ней на протяжении 100+ дней.
Если Вы считаете ее актуальной и хотите оставить сообщение, то воспользуйтесь кнопкой
или обратитесь к любому из модераторов.
Вернуться в начало страницы
 
Ответить с цитированием данного сообщения
Открыть тему
Тема закрыта
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0


Свернуть

> Похожие темы

  Тема Ответов Автор Просмотров Последний ответ
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлы⚡ AvitoSmart - быстрый парсер новых объявлений на Авито на запросах
Представляю парсер для [b]Zennoposter[/b]'a или [b]Zennobox[/b]
0 akcium 1269 19.11.2022, 13:05
автор: akcium
Открытая тема (нет новых ответов) Тема имеет прикрепленные файлыРазмещу 30 ссылок на российских форумах в новых темах
8 toris 3050 23.7.2022, 19:51
автор: ЭдуардКоструба
Открытая тема (нет новых ответов) Купить прокси недорого | Бесплатный тест и скидки для новых покупателей!
3 Secrets_Line 3510 13.4.2022, 13:44
автор: Secrets_Line
Опрос (нет новых голосов) Опрос: Lottery Partner в поиске новых партнеров! Самые высокие ставки на рынке!
116 lotterypartner 26781 3.6.2021, 15:18
автор: lotterypartner
Открытая тема (нет новых ответов) Andy.VIP - приглашаем новых партнеров.
4 DrGreg 1091 13.11.2020, 12:38
автор: DrGreg


 



RSS Текстовая версия Сейчас: 23.4.2024, 19:22
Дизайн