Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) MySQL Как запретить добавление новостей с одинаковыми заголовками, на стороне базы данных?

Как запретить добавление новостей с одинаковыми заголовками, на стороне базы данных?


     19.05.2015    MySQL    1346

вопрос
Здраствуйте уважаемые гуру, помогите пожалуйста избавить сайт от дублей новостей.

Описание
На сайт (dle 10.1) добавляются новости минуя админпанель, тоесть через скрипт который импортирует запросом по типу:
INSERT INTO `dle_post` (`таблицу...`)  VALUES (`значения...`)

Но естественно предусмотрели проверку в этом скрипте по наличию заголовка, если есть то не импортируется.
... if(!empty($_POST['short_story']) && !empty($_POST['title'])) {
    $inbase = @mysql_num_rows(mysql_query("SELECT * FROM dle_post WHERE title='".$_POST['title']."'"));
    if($inbase > 0)
echo 'no import';
else { ... запрос импорта данных

Этого мало, надо чтоб на сайт добавлялись только уникальные статьи (проверка по заголовку) но на стороне базы.

Было сделано
Пробовал индекс уникальный добавить запросом,
ALTER TABLE `dle_post`
ADD UNIQUE INDEX `ix_phone` (`title`)

по гайду
Внимание! У вас нет прав для просмотра скрытого текста.

Но безуспешно, поскольку на сайт как прежде с админки добавить можно новости с одинаковыми заголовками.

Что требуется
Добавление на сайт новостей чтоб возможно было только с уникальными заголовками.
Решение очень важно чтоб было со стороны базы данных!

Буду рад любому толковому решению проблемы!)

Ответил: amoseo


Решение:
1. В phpmyadmin выбираем базу, выбираем dle_post, Выполнить SQL
2. Сначало удалим дубликаты заголовков новостей запросом (вместо одинаковых оставит 1 уник)

ALTER IGNORE TABLE dle_post ADD UNIQUE INDEX titleindex (title);
ALTER TABLE dle_post DROP INDEX titleindex;



3. Подождали выполнение, все, теперь база без дублей и можно назначить U (уникальный) для title
"phpmyadmin - имя-базы - dle_post - Структура - отметить title - справо нажать на U уникальный"
Предпологаю это можно альернативно сделать просто запросом

ALTER TABLE `dle_post`
ADD UNIQUE INDEX `title` (`title`)

Комментарии пользователей (2)

vitnet
218

2172 | 930

vitnet - 19 мая 2015 15:10 - Эксперт

Пробуйте как написано в примере

amoseo
11 | 2

amoseo - 19 мая 2015 16:30 - Юзер

vitnet, спасибо за ответ, поступил иначе.

Решение:
1. В phpmyadmin выбираем базу, выбираем dle_post, Выполнить SQL
2. Сначало удалим дубликаты заголовков новостей запросом (вместо одинаковых оставит 1 уник)
ALTER IGNORE TABLE dle_post ADD UNIQUE INDEX titleindex (title);
ALTER TABLE dle_post DROP INDEX titleindex;

3. Подождали выполнение, все, теперь база без дублей и можно назначить U (уникальный) для title
"phpmyadmin - имя-базы - dle_post - Структура - отметить title - справо нажать на U уникальный"
Предпологаю это можно альернативно сделать просто запросом
ALTER TABLE `dle_post`
ADD UNIQUE INDEX `title` (`title`)

П.С. помогли на одном форуме хорошие люди, дали наводку про индексы.

Долго предмодерацию проходит вопрос :(
Хотел решение дописать под вопросом, нельзя дополнить вопрос или редактировать, дополните функционал такого хорошего сайта

Юзабилити сайта вопрос ответ
Модераторы на сайт вопрос ответ
Отображение времени кто и когда редактировал свой комментарий

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы