Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » MySQL » Как запретить добавление новостей с одинаковыми заголовками, на стороне базы данных?

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


     19.05.2015    Все вопросы » MySQL    4238

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

Описание
На сайт (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`)

3 комментария

vitnet
PHP-developer

vitnet - 19 мая 2015 15:10 -

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

amoseo
Юзер

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`)

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

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

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

OrenZeN
Юзер

OrenZeN - 1 октября 2020 02:10 -

Добрый день. Есть ёще варинаты ? у меня на хостинге "IGNORE" отключен

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

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

наверх