powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Припаркованный домен делает дубликаты записей в базу, как этого избежать?
13 сообщений из 13, страница 1 из 1
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801835
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Ситуация: есть сайт с падовским софтархивом, и есть домен, припаркованный к нему. В базе хранится часть полей пада + сам пад.

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

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

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

Что это за фигня и как с этим бороться? Если нужна еще какая-то инфа о ситуации, напишите какая, добавлю.
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801843
miksoft
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IcyWizardчасть полей пада + сам падэто что за зверь?

И вообще причем тут MySQL ?
Если "бороться" предполагаете на уровне MySQL, то показывайте структуру таблиц, запросы и т.п.
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801848
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пад = PAD = xml-страничка с описанием продукта. Типа такого http://repository.appvisor.com/info/app-900073a68ec0/PassportPDF_PDF_Reducer_pad.xml . Может храниться либо на сайте компании-владельца продукта, либо на глобальном репозитории, как в примере. Его структура стандартизована ASP.

Почему MySQL - потому что есть ощущение, что может быть ошибка в подходе к записи/хранению инфы.

$soft_pad_url - ссылка на пад

Код: php
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
$search_sql = "SELECT soft_id FROM software WHERE soft_pad_url='$soft_pad_url'";
       $search_result = mysqli_query($link, $search_sql); 
       $num_ans = mysqli_num_rows($search_result);
       if ($num_ans==0) {
       //submit PAD
                               
            $sql = "INSERT INTO software (soft_name, soft_version, soft_short_descr, 
soft_long_descr, soft_category, soft_cost, soft_license, soft_os, soft_size, soft_download_url,
 soft_info_url, soft_pad_url, soft_keywords, soft_company, soft_fcontact_name, 
soft_scontact_name, soft_email, soft_data) VALUES ('$soft_name', '$soft_version', 
'$soft_short_descr ', '$soft_long_descr', '$soft_category', '$soft_cost', '$soft_license', '$soft_os',
 '$soft_size', '$soft_download_url', '$soft_info_url', '$soft_pad_url', '$soft_keywords', 
'$soft_company', '$soft_fcontact_name', '$soft_scontact_name', '$soft_email','$today')";  
                                
            if(mysqli_query($link, $sql)){
                 echo('Your pad is submitted succesfully');
            } else {
                 echo ("ERROR in submitting");
            }
      } else {
         //update PAD
                                
          $sql = "UPDATE software SET soft_name='$soft_name', soft_version='$soft_version',
 soft_short_descr='$soft_short_descr', soft_long_descr='$soft_long_descr', 
soft_category='$soft_category', soft_cost='$soft_cost', soft_license='$soft_license', 
soft_os='$soft_os', soft_size='$soft_size', soft_download_url='$soft_download_url', 
soft_info_url='$soft_info_url', soft_pad_url='$soft_pad_url', soft_keywords='$soft_keywords', 
soft_company='$soft_company', soft_fcontact_name='$soft_fcontact_name', 
soft_scontact_name='$soft_scontact_name', soft_email='$soft_email', soft_data='$today' 
WHERE soft_pad_url='$soft_pad_url'";                                 
           
           if(mysqli_query($link, $sql)){
                 echo('Your pad is updated succesfully');
           } else {
                  echo ('ERROR in update');
           }
     } 




Нюанс еще в том, что есть аналогичная пара сайтов (основной + припаркованный), но не софтархивы, а статейные архивы. Движок переделывался оттуда, и там поиск в базе идет по названию статьи. Так там этой проблемы нет, никаких дубликатов.
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801860
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Покажите DDL таблицы software.
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801913
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
сделай уникальный индекс на soft_pad_url
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801919
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Увы, я новичок и терминологией владею плохо.

Что такое ddl? Выложу на всякий то, что видно через phpMyAdmin:

Про БД:

Сервер: Localhost via UNIX socket
Тип сервера: MariaDB
Соединение сервера: SSL не используется
Версия сервера: 10.3.14-MariaDB - MariaDB Server
Версия протокола: 10
Кодировка сервера: UTF-8 Unicode (utf8)

Про веб-сервер:

Apache
PHP расширение: mysqliДокументация curlДокументация mbstringДокументация
Версия PHP: 7.3.2


Список полей таблицы software:

soft_id (который primary key, auto increment) плюс те поля что в запросах: soft_name, soft_version, soft_short_descr, soft_long_descr, soft_category, soft_cost, soft_license, soft_os, soft_size, soft_download_url, soft_info_url, soft_pad_url, soft_keywords, soft_company, soft_fcontact_name, soft_scontact_name, soft_email, soft_data

все кроме последнего берется из пада, последний - текущая дата.
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801923
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ScareCrowсделай уникальный индекс на soft_pad_url
уникальный индекс с автоинкрементом на запись есть. А что означает "уникальный индекс на soft_pad_url"? Его как-то можно привязать не к записи, а к одному из ее полей?
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801944
Фотография ScareCrow
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторЕго как-то можно привязать не к записи, а к одному из ее полей
ну да. https://devionity.com/ru/courses/mysql-fundamentals/adding-indexes
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39801948
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
При попытке поставить (через phpMyAdmin) уникальность на soft_pad_url пишет:

запрос: ALTER TABLE `software` ADD UNIQUE( `soft_pad_url`);
результат: BLOB/TEXT column 'soft_pad_url' used in key specification without a key length

тип поля soft_pad_url - tinytext
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39802000
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
IcyWizardЧто такое ddl?
Это Data Definition Language, и в данном случае имеется в виду - структура таблицы. То, что выводится в ответ на запрос
Код: sql
1.
SHOW CREATE TABLE tablename;
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39802015
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
CREATE TABLE `software` (
 `soft_id` int(11) NOT NULL AUTO_INCREMENT,
 `soft_name` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_version` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_short_descr` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_long_descr` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_category` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_cost` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_license` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_os` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_size` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_download_url` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_info_url` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_pad_url` tinytext COLLATE utf8_unicode_ci NOT NULL,
 `soft_keywords` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_company` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_fcontact_name` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_scontact_name` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_email` text COLLATE utf8_unicode_ci NOT NULL,
 `soft_data` date NOT NULL,
 PRIMARY KEY (`soft_id`),
) ENGINE=InnoDB AUTO_INCREMENT=46 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39802129
Фотография Akina
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: sql
1.
2.
CREATE UNIQUE INDEX idx_software_soft_pad_url
ON software ( soft_pad_url(255) );


А потом INSERT .. ON DUPLICATE KEY UPDATE .. .
...
Рейтинг: 0 / 0
Припаркованный домен делает дубликаты записей в базу, как этого избежать?
    #39802399
IcyWizard
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, работает :)
...
Рейтинг: 0 / 0
13 сообщений из 13, страница 1 из 1
Форумы / MySQL [игнор отключен] [закрыт для гостей] / Припаркованный домен делает дубликаты записей в базу, как этого избежать?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]