Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/topic.php on line 737 Форумы портала PHP.SU :: проверка наличии записи
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
Либо через запрос select к базе данных, либо в самой таблице поставить уникальный индекс на нужное Вам поле. (Добавление)
Про уникальный индекс хочу уточнить, что это хорошо только когда текст не большой. Если Вы собираетесь сравнивать что-то больше 500 символов, то тогда лучше select сделать. А то иначе таблица сильно разрастется и может порядком грузить сервер.
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
Champion
Отправлено: 18 Марта, 2011 - 21:06:19
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Плюс, если текст большой, то индекс создать лучше не по нему, а создать поле с хэшем md5 и наложить уникальный индекс на него.
grefon
Отправлено: 18 Марта, 2011 - 21:08:09
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
Champion впервые слышу а таком методе. Спасибо, как-нибудь попробую
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
DeepVarvar
Отправлено: 18 Марта, 2011 - 21:10:17
Активный участник
Покинул форум
Сообщений всего: 10377
Дата рег-ции: Дек. 2008 Откуда: Альфа Центавра
Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010
Помог: 1 раз(а)
Champion, спасибо за идею
grefon, можно пример как с большим текстом так и с малым?
Champion
Отправлено: 18 Марта, 2011 - 21:13:34
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
Только этот индекс можно будет использовать для поиска по полному соответствию строки и стоит учитывать, что бесконечное множество разных строк могут иметь один хэш.
Но в этой ситуации наткнуться на такие строки наверное невозможно. Если всё же есть опасения, можно хранить 2 хэша - по всей строке и по половине строки. (Добавление)
xhugo пишет:
можно пример как с большим текстом так и с малым?
Пример создания индекса? Или пример селекта?
grefon
Отправлено: 18 Марта, 2011 - 21:19:01
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
Помог: 32 раз(а)
С малым текстом: в phpmyadmin заходите в таблицу. На страницы ищите "Индексы", жмякаете "Создать индекс на 1 колонках". Тип индекса ставите UNIQUE и выбираете нужное поле.
Для большого текста создаете еще одно поле в которое будет писаться md5. Для него ставите уникальный индекс. А добавлять запись уже надо так:
----- ____________________________________________________________________
Ну как то так, наверное. http://grefon[dot]com
xhugo
Отправлено: 18 Марта, 2011 - 21:27:56
Посетитель
Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010
Помог: 1 раз(а)
это ясно.
Но я вот добавляю новый текст в бд из того что напарсил,
потом вывожу из бд
Нужно просто сделать проверку на наличии этой записи именно,текста. если есть то не добавляет, если есть - добавил новую
grefon
Отправлено: 18 Марта, 2011 - 21:35:29
Частый посетитель
Покинул форум
Сообщений всего: 823
Дата рег-ции: Нояб. 2010
You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ': я сейчас сидела, картошку молодую чистила, ' at line 1
Champion
Отправлено: 19 Марта, 2011 - 13:08:49
Активный участник
Покинул форум
Сообщений всего: 4350
Дата рег-ции: Авг. 2008 Откуда: Москва
Помог: 57 раз(а)
тогда уж
xhugo пишет:
$s=htmlspecialchars(strip_tags($s), ENT_QUOTES) ;
А вообще есть mysql_real_escape_string
xhugo
Отправлено: 19 Марта, 2011 - 14:21:00
Посетитель
Покинул форум
Сообщений всего: 357
Дата рег-ции: Дек. 2010
You have an error IN your SQL syntax; CHECK the manual that corresponds TO your MySQL server version FOR the RIGHT syntax TOUSE near '” Слушай, Р° чем отличается Бизнес РѕС‚ работы? ' at line 1
EuGen
Отправлено: 19 Марта, 2011 - 19:57:58
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
Решение с md5-индексами не годится в случае больших объемов данных. Как известно, md5 стойкий к коллизиям до определенной степени, кроме того, на его вычисление требуются затраты. Но он правда позволяет строить хороший индекс в случае, если объем данны колеблется в разумных пределах (то есть не слишком велим и не слишком мал)
Для больших текстовых полей можно как вариант использовать индексы ограниченной длины.
А по проверке - есть возможность это делать сразу, 1-м запросом. Почитайте про INSERT IGNORE
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
DlTA
Отправлено: 19 Марта, 2011 - 20:24:22
Постоянный участник
Покинул форум
Сообщений всего: 2952
Дата рег-ции: Окт. 2010
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.