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 :: Как написать правильный код?
Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011
Помог: 0 раз(а)
Привет, сразу перейду к объяснениям.
Есть таблица persons, и torrents.
Ячейки таблицы persons: id, name
Ячейки таблицы: torrents: id, descr
Задача:
Примерно один или два раза в неделю проводить обновление:
В таблице persons в ячейке name - хранится имя и фамилия персоны.
В таблице torrents в ячейке descr - хранится описание релиза.
Нужно брать содержимое ячейки name (имя и фамилия) проверять нет ли такого в содержимом ячейки descr (описание релиза), если такое находится, то в содержимом ячейки descr (описание релиза) заменяеся имя и фамилия актера на какую нибудь ссылку, например persons.php?id=ID, если не находится то просто пропускаем релиз.
Теперь о количествах записей в таблицах:
Таблица torrents, там будет около ~2000-3000 записей.
Таблица persons, количество записей так-же пока что не известно, но с уверенностью могу сказать что их там будет не меньше 5000.
Ну, вот ребята помогите построить нормальный код.
Свою версию кода я выкладывал в соседней теме, вот здесь: http://forum.php.su/topic.php?forum=71&topic=4086, но после моего тестирования она ни грамма не оправдала моих надежд, одним словом мне чуть глаза не повыпадали.
$sql=mysql_query("UPDATE `torrents` SET `descr`='$link' WHERE `id`='{$array_2['id']}'");
}
}
Как то так, вроде должно работать. Про быстродействие кода не скажу, нужно у более опытных спрашивать.
Мелкий
Отправлено: 14 Февраля, 2012 - 08:58:49
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
Вариант, демократичный к базе и не очень - к памяти, несколько десятков мб слопает:
Грузите всех персон в массив.
Грузите торренты и в цикле обработки запроса вложенным циклом ищите персону.
Если что-то нашли - апдейтите запись.
----- PostgreSQL DBA
snikers987
Отправлено: 14 Февраля, 2012 - 10:30:46
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Помог: 25 раз(а)
Dezmont два запроса к базе в цикле это правильный код?
----- Когда всматриваешься в тёмную бездну, учти, что кто-то может смотреть на тебя из неё...
Dezmont
Отправлено: 14 Февраля, 2012 - 10:43:19
Частый гость
Покинул форум
Сообщений всего: 245
Дата рег-ции: Июль 2010
Помог: 1 раз(а)
snikers987 пишет:
Dezmont два запроса к базе в цикле это правильный код?
Наверное нет, если вы спрашиваете. Больше не буду так делать... Ток учусь(((
snikers987
Отправлено: 14 Февраля, 2012 - 11:35:01
Участник
Покинул форум
Сообщений всего: 1239
Дата рег-ции: Сент. 2011 Откуда: Крым
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
event
Лично мое мнение: отойти от проверок сомнительных полей вроде description и создать нормальную таблицу-связку между persons и torrents. После этого задача решается элементарным JOIN
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
event
Отправлено: 14 Февраля, 2012 - 16:26:52
Частый посетитель
Покинул форум
Сообщений всего: 542
Дата рег-ции: Май 2011
Помог: 0 раз(а)
EuGen
Ну не знаю, +1 таблица тоже не есть хорошо. (Добавление)
Блин, ну и зачада мне выпала...
EuGen
Отправлено: 14 Февраля, 2012 - 16:29:16
Профессионал
Покинул форум
Сообщений всего: 9095
Дата рег-ции: Июнь 2007 Откуда: Berlin
Помог: 707 раз(а)
event
Ничего себе. Ну, даже не знаю, что сказать.
Если серьезно - то ровно для того и существуют реляционные БД, чтобы хранить данные в удобном виде.
Создание этой таблицы сразу же решит поставленный вопрос оптимальным способом, так как избыточности оно не добавляет, но при этом формализует связь между двумя сущностями на уровне БД, что позволяет использовать это непосредственно в приложении.
----- Есть в мире две бесконечные вещи - это Вселенная и человеческая глупость. Но насчет первой .. я не уверен.
OrmaJever
Отправлено: 14 Февраля, 2012 - 16:33:56
Активный участник
Покинул форум
Сообщений всего: 7540
Дата рег-ции: Янв. 2010 Откуда: Чернигов
Помог: 299 раз(а)
event пишет:
Хотелось бы еще услышать мнения, особенно от OrmaJever`a
я тут не причём, я php вижу первый раз и вобще не знаю как я попал на этот форум. Пусть EuGen и Мелкий подскажут, у них лучше получается
----- Если вы хотя бы 3-4 раза не решите всё выкинуть и начать заново - вы явно что-то делаете не так.
Мелкий
Отправлено: 14 Февраля, 2012 - 18:02:55
Активный участник
Покинул форум
Сообщений всего: 11926
Дата рег-ции: Июль 2009 Откуда: Россия, Санкт-Петербург
Помог: 618 раз(а)
event пишет:
Ну не знаю, +1 таблица тоже не есть хорошо.
Это значительно лучше какого-то фонового процесса. Особенно потом с поиском "все фильмы с актёром" и подобные.
Тем не менее, в поставленной задаче это не поможет, ведь затея в тексте типа:
Цитата:
Но тут выпрыгивает username (его играет person_name) и всё уплыло
Сделать person_name ссылкой на соответствующий person_id. event, ведь так?
Все гости форума могут просматривать этот раздел. Только зарегистрированные пользователи могут создавать новые темы в этом разделе. Только зарегистрированные пользователи могут отвечать на сообщения в этом разделе.