|
|
|
| добрый день! подскажите, пожалуйста, как сделать вывод "Других книг (новостей) по теме".
К примеру как здесь (да и на других сайтах полно такого вывода, но я не знаю как)
http://www.kodges.ru/36037-makrojekonomika.html
Спасибо, заранее, всем откликнувшимся | |
|
|
|
|
|
|
|
для: VikaRI
(17.03.2009 в 13:25)
| | если вы когда нибудь реализовывали поиск на сайте, то это он и есть можно сказать.
просто в качестве ключевого слова берем поочереди слова из залоговка новости | |
|
|
|
|
|
|
|
для: nikita2206
(17.03.2009 в 19:26)
| | спасибо за подсказку. идея отличная. но поиск никогда реализовывала, я еще вообще мало чего раеализовывала), подскажите,пожалуйста с кодом... | |
|
|
|
|
|
|
|
для: VikaRI
(18.03.2009 в 12:35)
| | Это действительно такой сложный код, что стоит забыть о нем(((?
Подскажите, пожалуйста!!!!! | |
|
|
|
|
|
|
|
для: VikaRI
(20.03.2009 в 11:25)
| | Меня тоже интересует такой скрипт! ГУРУ, пожалуйста, опишите поподробнее как это сделать! | |
|
|
|
|
|
|
|
для: VikaRI
(17.03.2009 в 13:25)
| | В CMS Bitrix привязка новостей по темам осуществляется явно и вручную. Грубо говоря это запись вида: ID исходной новости -> список ID новостей по теме. | |
|
|
|
|
|
|
|
для: Саня
(10.08.2009 в 16:03)
| | Так этот сайт сделан на CMS Bitrix?
А нельзя ли применять скрипты с CMS Bitrix для обычных сайтов нfписаных на php и mysql? | |
|
|
|
|
|
|
|
для: hitball
(10.08.2009 в 16:14)
| | Этот сайт (softtime.ru) написан не на битриксе. Я просто рассказываю как с вашим вопросом обстоят дела в больших проектах.
Грубо говоря это две таблицы в БД:
novosti (
id INT,
title TEXT,
body TEXT
)
novosti_po_teme (
parent_id INT,
child_id INT
)
| Где parent_id — идентификатор основной новости, а child_id — идентификатор связанной новости. | |
|
|
|
|
|
|
|
для: Саня
(10.08.2009 в 16:20)
| | Спасибо огромное за идею! Сейчас опробую и отпишусь. | |
|
|
|
|
|
|
|
для: Саня
(10.08.2009 в 16:20)
| | Забыла спросить, если у меня две таблицы articles и books? как мне организовать таблицу novosti_po_teme? Там все путается в одинаковых id для разных таблиц. | |
|
|
|
|
|
|
|
для: VikaRI
(17.03.2009 в 13:25)
| | Задавая такой вопрос, вообще-то не лишним будет приводить дамп структуры (лучше даже вместе с дампом данных) БД, к которой идут запросы. | |
|
|
|
|
 1006 байт |
|
|
для: Trianon
(10.08.2009 в 17:07)
| | Вот дамп структуры. Извените, что сразу его не выложила! | |
|
|
|
|
|
|
|
для: hitball
(10.08.2009 в 17:56)
| | Забыла спросить, если у меня две таблицы articles и books? | |
|
|
|
|
|
|
|
для: hitball
(11.08.2009 в 17:45)
| | То есть Вам нужно вывести книги, связанные со статьей?
Или вывести все книги связанные со всеми статьями, которые связаны с конкретной книгой?
Таблица
CREATE TABLE `art_books`
(
`art_id` int(6) NOT NULL,
`book_id` int(7) NOT NULL,
);
|
SELECT b.*
FROM art_books ab
JOIN books b2 ON b.id = ab.book_id
WHERE art_id = $article
|
SELECT b.*
FROM art_books ab1
JOIN art_books ab2 ON ab1.art_id = ab2.art_id
JOIN books b ON b.id = ab2.book_id AND b.id <> ab1.book_id
WHERE ab1.book_id = $book AND
|
| |
|
|
|
|
|
|
|
для: Trianon
(11.08.2009 в 18:18)
| | Мне нужно вывести в книгах - похожие книги, а в статьях - похожие статьи. | |
|
|
|
|
|
|
|
для: hitball
(11.08.2009 в 19:05)
| | На чем основана похожесть? Я бы предложил сделать как в блоге ввести теги - к каждой книге набор тегов. | |
|
|
|
|
|
|
|
для: mihdan
(11.08.2009 в 19:12)
| | да, у меня тоже к каждой книге и статье есть набор ключевых слов, графа в таблице kluch | |
|
|
|
|
|
|
|
для: hitball
(11.08.2009 в 19:17)
| | По каким критериям одна книга считается похожей на другую?
И какое отношение ко всему к этому имеют записи в таблице articles ? | |
|
|
|
|
|
|
|
для: Trianon
(11.08.2009 в 19:19)
| | По ключевым словам в поле kluch и по описанию книги в поле text. | |
|
|
|
|
|
|
|
для: hitball
(11.08.2009 в 19:33)
| | Отношения таблицы articles и books к друг другу не имеют. Просто нужно выводить под книгами- похожие книги, а под статьями - похожие статьи. | |
|
|
|
|
|
|
|
для: hitball
(11.08.2009 в 19:33)
| | понятно.
не хотим ни делать, ни думать, ни даже на вопросы отвечать по-человечески. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 09:31)
| | Чесно говоря не знаю, что я ответила "не по-человечески".
Пишу по-другому.
Статья (а также книга) считается похожей одна на другую по ключевым словам в поле kluch и по описанию книги в поле text.
Отношения таблицы articles и books к друг другу не имеют. Просто нужно выводить под книгами- похожие книги, а под статьями - похожие статьи.
А насчет "не хочу думать", так если бы я могла сама придумать, я бы и спрашивала...
Извените, если мои ответы показались Вам неккоректными | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 09:46)
| | Вот пример критерия.
Статья A считается похожей на статью B если содержимое поля kluch записи A равно содержимому поля kluch записи B или содержимое поля text записи A равно содержимому поля text записи B
У Вас же только общие слова.
Слова это конечно хорошо, если четких условий пока нет.
Но тогда они должны подробнейшим образом описывать, что Вы вкладываете в понятие ключевых слов, описания, и тому подобных терминов, на которые ссылаетесь.
Потому что это не термины Базы данных. Это термины Вашей модели.
Сразу замечу - списки чего либо в БД в одном поле чохом не хранят. В том числе и списки ключевых слов.
Для этого организуют таблицу ключевых слов (чтобы иметь список этих самых слов) и таблицу связки, (которую Вам предложил и показал не только я) соединяющую книги и слова.
Ну или в случае статей - статьи и слова.
При чем если ключевые слова одни и те же - достаточно одной таблицы ключевых слов, но само собой - две разные таблицы связок - одна с книги-слова, другая статьи-слова.
В ситуации со статьями меня лично поразило то, что Вы (как оказалось) излагаете две одинаковые по смыслу задачи. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 10:06)
| | Дамс, вот это дел я натворила. Пойду еще раз осмыслю что Вы написали. | |
|
|
|
|
|
|
|
для: hitball
(11.08.2009 в 19:05)
| |
Мне нужно вывести в книгах - похожие книги, а в статьях - похожие статьи.
|
нужно сделать полнотекстовый индекс по статьям и полнотекстовый индекс по книгам, и искать по нему похожие статьи и похожие книги.
http://dev.mysql.com/doc/refman/4.1/en/fulltext-natural-language.html | |
|
|
|
|
|
|
|
для: serjinio
(12.08.2009 в 10:55)
| | Чушь.
Из-за попытки подменить термин "похожий" собственным пониманием. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 11:06)
| | А почему нельзя связать "таблицу связки" и ПРОСТО таблицы articles и books (без создания дополнительной таблицы ключевых слов)? Через идентификатор id.
Я бы создала таблицу articles_id - для статей и books_id - для книг. И уже в эту таблицу вручную вписывала бы похожие статьи по id. Только не знаю как связать эти две таблицы. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 11:06)
| | Какой вопрос ---такой ответ... :)
В данной постановке вопроса оптимальное решение:
Сделать таблицу связей ,где статьям будут соответствовать определенные книги
или таблицу связей многие-ко-многим ,где не только к статье будут соответствовать разные книги,но и к книге будут соответствовать разные статьи | |
|
|
|
|
|
|
|
для: serjinio
(12.08.2009 в 11:43)
| | каким образом это все можно связать? | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 11:51)
| |
id_a article_title
1 статья 1
2 статья 2
3 статья 3
id_b book_title
1 книга 1
2 книга 2
3 книга 3
к статье 1 относятся книгам 2,3
id_link id_a id_b
1 1 2
2 1 3
|
выбираем книги для статьтьи 1 : WHERE id_a = 1
к книге 1 относятся статьям 3,1
id_link id_a id_b
1 3 1
2 1 1
|
выбираем статьи для книги 1 : WHERE id_b = 1 | |
|
|
|
|
|
|
|
для: serjinio
(12.08.2009 в 12:16)
| | id_link в принципе не требуется. | |
|
|
|
|
|
|
|
для: serjinio
(12.08.2009 в 12:16)
| | Спасибо большое, но мне действительно надо вывести в книгах - похожие книги, а в статьях - похожие статьи. | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 12:48)
| | если таблицы пока пусты - я не понимаю что Вы теряете.
если списки ключевых слов у Вас уже забиты в таблицы - скрипт, который раскидает списке из полей kluch в отдельные таблицы займет 15-20 строк отсилы. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 12:58)
| | да как же пустые? у меня статей только штук 500) | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 13:04)
| | Фрагмент дампа мы увидим? | |
|
|
|
|
 12.1 Кб |
|
|
для: Trianon
(12.08.2009 в 13:08)
| | Вот кусочек дампа таблицы books | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 13:16)
| | но тут нет поля kluch? | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 13:23)
| | есть, конечно. Оно же поле kluch находится в таблице books. У меня нет отдельной таблицы для ключевых слов. | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 13:26)
| | А, пардон.
Тогда алгоритм, схематично представленный в предыдущей реплике(12.08.2009 в 13:19), вполне это поле разложит по таблицам.
Если эти таблицы создать, конечно. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 13:08)
| | Вкратце, если позволите:
for($res = my("SELECT * FROM books"); $row = mysql_fetch_assoc($res); )
{
$id = $row['id'];
$list = explode(',', $row['kluch']);
foreach($list as $word)
add_key(trim($word), $id, "key", "book_key");
}
function add_key($word, $id, $keytable, $linktable)
{
$word = "'".mysql_escape_string($word)."'";
$id = intval($id);
$key_id = myi("INSERT IGNORE INTO `$keytable` (`word`) VALUES ($word)");
if(!$key_id)
$key_id = my1("SELECT id FROM `$keytable` WHERE `word` = $word");
$key_id = intval($key_id);
my("INSERT INTO `$linktable` (key_id, obj_id) VALUES($key_id, $id)");
}
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 13:19)
| | Я так понимаю мне нужно создать какие-то дополнительные поля в таблице? | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 13:45)
| | Нет. Их и так уже перебор.
Вам нужно рассказать, где лежат ключевые слова, и что самое главное - как они там лежат? | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 13:46)
| | Ключевые слова лежат в таблицах books и articles. В графе kluch.
Лежат они, к примеру, в таком виде: дети, родители, развитие детей, обучение, игры.
Как видите, у меня иногда встречается и сочетания слов. | |
|
|
|
|
|
|
|
для: serjinio
(12.08.2009 в 11:43)
| | Вы бы прочли сперва тред.
В частности (11.08.2009 в 18:18)
Что за идея ляпнуть не глядя то, что уже показано? | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 11:06)
| | Отчего же... это вполне реально... правда целесообразность... а тем паче эффективность... мде... | |
|
|
|
|
|
|
|
для: Loki
(12.08.2009 в 11:49)
| | Я, конечно, понимаю, что это будет очень хлопотно, но, мне кажеться, что создавать новую таблицу с ключевыми словами будет еще хлопотнее или Вам так не кажеться? | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 11:55)
| | нет.
Это не так.
Тем более что у Вас в дампе с десяток таблиц присутствует.
А значит сами по себе таблицы ценностью не являются. | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 11:55)
| | Зависит от того, что Вы хотите получить в итоге. Если работающее приложение, то ключевые слова - наименее затратное решение, если "псевдоинтеллектуальную систему", которая неважно сколько занимает места и/или как быстро работает, тогда можно и через полнотекстовый поиск. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2009 в 11:49)
| | Забивание шурупов молотком - вполне реальный прием... | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 12:19)
| | И ведь заметь, забитый шуруп держится лучше чем завинченный гвоздь:) | |
|
|
|
|
|
|
|
для: Loki
(12.08.2009 в 12:28)
| | Я вот гадал, хватит тебя такта не вспоминать эту пошлость или нет?
Точнее, вспомнив, понять, что я о ней тоже помню. И не цитировать.
Не угадал. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 12:29)
| | Ничего не пошлость, а очень образно) | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 12:30)
| | Я знаю. Сам здесь цитировал.
Но просто именно эта идея - развратна по сути.
Нельзя оправдывать выбор плохого приема тем, что в теории существует худший. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 12:29)
| | Я уже заметил постом выше что зависит от задач: если задачи реальные, то и методы должны быть адекватные, если же делаем "сферического коня в вакууме", то можно ни в чем себе не отказывать. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2009 в 12:34)
| | забитый шуруп это метод, неадекватный любой цели.
К теме.
Ты предложил выбрать из текущей книги список её ключевых слов и воткнуть напрямую в полнотекстовый запрос?
полнотекстовый запрос (шуруп) проектировался для обработки human-created поисковых запросов (из расчета на то, что будет завинчен отверткой) | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 12:37)
| | Даже еще тупее: скормить текст книги в качестве полнотекстового запроса и получить пары id - релевантность. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2009 в 12:41)
| | О... это не конь в вакууме. Это газенваген какой-то... | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 12:43)
| | Собственно, это всего лишь комментарий к утверждению что похожесть можно определять на основании результатов полнотекстового поиска. Да можно. Попробуй не согласиться:)
И чем принципиально система ключевых слов отличается от этого? Только тем, что в данном случае определение ключевых слов отдано на откуп механизму построения полнотекстовых индексов. | |
|
|
|
|
|
|
|
для: Loki
(12.08.2009 в 12:50)
| | >Собственно, это всего лишь комментарий к утверждению что похожесть можно определять на основании результатов полнотекстового поиска. Да можно. Попробуй не согласиться:)
Можно.
Просто у нас цели разные. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 13:00)
| | Ключевые слова лежат в таблицах books и articles. В графе kluch.
Лежат они, к примеру, в таком виде: дети, родители, развитие детей, обучение, игры.
Как видите, у меня иногда встречается и сочетания слов. | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 14:53)
| | представленный код с этим полем kluch и работает | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 16:50)
| |
for($res = my("SELECT * FROM books"); $row = mysql_fetch_assoc($res); )
{
$id = $row['id'];
$list = explode(',', $row['kluch']);
foreach($list as $word)
add_key(trim($word), $id, "key", "book_key");
}
function add_key($word, $id, $keytable, $linktable)
{
$word = "'".mysql_escape_string($word)."'";
$id = intval($id);
$key_id = myi("INSERT IGNORE INTO `$keytable` (`word`) VALUES ($word)");
if(!$key_id)
$key_id = my1("SELECT id FROM `$keytable` WHERE `word` = $word");
$key_id = intval($key_id);
my("INSERT INTO `$linktable` (key_id, obj_id) VALUES($key_id, $id)");
|
Извените за настойчивость, я понимаю, что за сегодня Вы уже переобщались со мной...
Пожалуйста, расскажите, что это за переменные:
"key", "book_key", $keytable, $linktable, $word...
А то мне выдает такую ошибку: Fatal error: Call to undefined function: my() in
Я явно что-то не то делаю | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 17:26)
| | Я нарисовал набросок кода.
в моем примере:
$keytable - параметр функции, который показывает имя таблицы с ключевыми словами .
$linktable - параметр функции, который показывает имя таблицы связки ключ-книга, или ключ-статья
соответственно
key - название таблицы ключевых слов key(key_id, obj_id)
book_key - название таблицы связки ключ-книга book_key(id, word)
функци my(), my1(), myi() - аналоги mysql_query() , mysql_result(mysql_query(),0) и mysql_insert_id(mysql_query()) с соответствующим аккуратным анализом ошибок и вывдачей результатов. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 18:35)
| | Я совсем запуталась.
Мне нужно создать таблицы key с полями key_id, obj_id и book_key с полями id, word?
Или что обозначают переменные в скобках?
Какие данные мне нужно заменить на свои? | |
|
|
|
|
|
|
|
для: hitball
(12.08.2009 в 19:16)
| | Прошу прощения.
Это я уже наборы полей перепутал.
CREATE TABLE `key` (
`id` int(11) NOT NULL auto_increment,
`word` varchar(255) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE `word`(`word`)
);
CREATE TABLE `book_key` (
`key_id` int(11) NOT NULL,
`obj_id` int(11) NOT NULL,
PRIMARY KEY (`key_id`,`obj_id`)
);
|
Все имена исключительно для примера.
Я ничего не навязываю. | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 19:30)
| | названия очень подходящие.
Но у меня не получилось.
Пишет ошибку: Parse error: syntax error, unexpected $end
А какие данные мне необходимо заносить в эти таблицы? | |
|
|
|
|
 4.4 Кб |
|
|
для: hitball
(12.08.2009 в 21:30)
| | Эти.
таблицы.
заполняет.
скрипт.
который я привел в (12.08.2009 в 13:19)
Беря данные из полей kluch Вашей таблицы.
Во всяком случае у меня - после того, как я набросал те три функции - заполнил.
но можете заполнить и сами (см. аттач) | |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 22:02)
| |
<?php
function my($sql)
{
$res = mysql_query($sql);
if(!$res)
exit("error in: <hr> ".nl2br(htmlspecialchars($sql))."<hr>".mysql_error());
return $res;
}
function my0($sql)
{ $res = my($sql); return mysql_num_rows($res) ? mysql_fetch_array($res) : 0;}
function my1($sql)
{ $row = my0($sql); return is_array($row)? $row[0] : 0; }
function myi($sql)
{ $res = my($sql); return mysql_affected_rows() ? mysql_insert_id() : 0; }
?>
|
| |
|
|
|
|
|
|
|
для: Trianon
(12.08.2009 в 22:17)
| | Доброе утро!
Продолжаю доставать Вас дилетантскими вопросами.
Что мне делать с последним приведенным кодом?
И теперь выдает такую ошибку:
error in:
INSERT INTO `book_key` (key_id, obj_id) VALUES(129, 288)
Duplicate entry '129-288' for key 1 | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 08:52)
| | >Что мне делать с последним приведенным кодом?
Здрасти. Приехали.
Что мне делать с Вашим дампом?
>
>И теперь выдает такую ошибку:
И когда - теперь?
>error in:
>INSERT INTO `book_key` (key_id, obj_id) VALUES(129, 288)
>Duplicate entry '129-288' for key 1
Такое может произойти только при повторном вызове скрипта. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 10:35)
| | Вы хотите сказать, что я два раза написала в коде один и тот же скрипт?
Но ведь это не так.
Не знаю какой именно из моих скриптов мешает работать Вашему, по-этому приведу код страницы view_books.php целиком.
<?php
include ("blocks/bd.php"); /*соединяемся с базой*/
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$new_view = $myrow["view"] + 1;
$update = mysql_query ("UPDATE books SET view='$new_view' WHERE id='$id'",$db);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head>
<meta name="Description" content="<?php echo $myrow['meta_d']; ?>" />
<meta name="Keywords" content="<?php echo $myrow['meta_k']; ?>" />
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<title><?php echo $myrow['title']; ?></title>
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<link href="style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
TABLE {
table-layout: fixed; /* Ячейки фиксированной ширины */
}
-->
</style>
</head>
<body>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
<!--Подключаем шапку-->
<? include("blocks/header.php"); ?>
<td ><div align="center">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<!--левую часть-->
<? include ("blocks/lefttd.php"); ?>
<td width="63%" valign="top"><? include ("blocks/nav.php");?><p>
<?
printf ("
<h2 font-size:18px; font-weight:bold; class='view_title'>%s</h2>
<img alt='%s' title='%s' class='mini_books' align='left' src='%s'>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span></br>
<span class='lesson_add'>Дата добавления: %s</span><br>
<span class='lesson_add'>Просмотров: %s</span></br>
<span class='lesson_add'>Размер: %s Кб</span></br>
<span class='lesson_add'>Закачек: %s</span>
<p style='font-size:10px; text-align:left; color:#808080;'><span style='font-weight:bold; color:#808080;'>Книга найдена по ключевым словам:</span> %s</p>
<p class='lesson_left'>%s</p>
<span class='lesson_add'><a style='font-size:12px; text-align:left; font-weight:bold; color:#cc0000' href='download.php?id=%s'>Скачать '%s'</a></span></p> <p class='lesson_left'>%s</p>
<p class='lesson_left'>%s</p>",$myrow["title"],$myrow["alt"],$myrow["titleimg"],$myrow["mini_img"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["kluch"],$myrow["text"],$myrow["id"],$myrow["title"],$myrow["link_ru"],$myrow["link_ua"]);
?>
.
<form action="download.php" method="post" name="vv">
<p class="pvot">Поставить оценку: 1 <input name="score" type="radio" value="1" /> 2 <input name="score" type="radio" value="2" /> 3 <input name="score" type="radio" value="3" /> 4 <input name="score" type="radio" value="4" /> 5 <input name="score" type="radio" value="5" checked/>
<input class="sub_vote" name="submit" type="submit" value="Оценить" />
<input name="id" type="hidden" value="<? echo "$id";?>" />
</p>
</form>
<? for($res = my("SELECT * FROM books"); $row = mysql_fetch_assoc($res); )
{
$id = $row['id'];
$list = explode(',', $row['kluch']);
foreach($list as $word)
add_key(trim($word), $id, "key", "book_key");
}
function add_key($word, $id, $keytable, $linktable)
{
$word = "'".mysql_escape_string($word)."'";
$id = intval($id);
$key_id = myi("INSERT IGNORE INTO `$keytable` (`word`) VALUES ($word)");
if(!$key_id)
$key_id = my1("SELECT id FROM `$keytable` WHERE `word` = $word");
$key_id = intval($key_id);
my("INSERT INTO `$linktable` (key_id, obj_id) VALUES($key_id, $id)");
} ?>
<?php
function my($sql)
{
$res = mysql_query($sql);
if(!$res)
exit("error in: <hr> ".nl2br(htmlspecialchars($sql))."<hr>".mysql_error());
return $res;
}
function my0($sql)
{ $res = my($sql); return mysql_num_rows($res) ? mysql_fetch_array($res) : 0;}
function my1($sql)
{ $row = my0($sql); return is_array($row)? $row[0] : 0; }
function myi($sql)
{ $res = my($sql); return mysql_affected_rows() ? mysql_insert_id() : 0; }
?>
<?
echo "<p class='post_comment'>Комментарии:</p>";
$result3 = mysql_query ("SELECT * FROM comments_books WHERE post='$id'",$db);
if (mysql_num_rows ($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);
do
{
printf ("<div class='post_div'><p class='post_comment_add'>Комментарий добавил(а): <strong>%s </strong><br> Дата: <strong> %s</strong></p><p class='post_comment_addd'> %s</p></div>",$myrow3["author"], $myrow3["date"], $myrow3["text"]);
}
while ($myrow3 = mysql_fetch_array($result3));
}
$result4 = mysql_query ("SELECT img FROM comments_setting",$db);
$myrow4 = mysql_fetch_array ($result4);
?>
<p class='post_comment'>Добавить Ваш комментарий или пожаловаться на битую ссылку:</p>
<form action="comment_books.php" method="post" name="form_com">
<p class='post_comment_add'><label>Ваше имя: </label><input name="author" type="text" size="42" maxlength="40" /></p>
<p class='post_comment_add'><label>Текст комментария: <br><textarea name="text" cols="40" rows="4"></textarea></label></p>
<p class='post_comment_add'>Введите сумму чисел с картинки</p>
<p class='post_comment_add' ><img style='margin-top:9px;' src="<? echo $myrow4["img"]; ?>" alt="Финансовая грамотность" width="58" height="31" />
<input style='margin-bottom:10px;' name="pr" type="text" size="5" maxlength="5" /></p>
<input name="id" type="hidden" value="<? echo $id; ?>" />
<p class='post_comment_add' ><input name="sub_com" type="submit" value="Комментировать" /></p>
</form>
</p>
.
</td>
<!--Подключаем правую часть-->
<div align="center">
<? include("blocks/pravtd.php"); ?>
</div>
</tr>
</table>
</div></td>
</tr>
<!--Подключаем низ-->
<? include ("blocks/footer.php")?>
</table>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 11:04)
| | код вообще говоря предназначен был для однократного вызова - чтобы списки ключей переделать для тех пятисот записей, которые у Вас уже в таблице.
Хотя функцию add_key можно применить и для добавления ключей вновь добавляемых записей.
Правда для этого код нужно понять, а не слепо копировать.
Попытка повторно перегнать все ключевые наборы, естественно, приводит к ошибкам о дублирующихся записях. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 11:11)
| | То есть для новых записей он не будет работать, да?
Правда для этого код нужно понять, а не слепо копировать.
|
В моем случае лучше слепо копировать, а то хуже сделаю... | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 11:14)
| | >В моем случае лучше слепо копировать, а то хуже сделаю...
Тогда лучше было обращаться не ко мне.
Сделать хуже, чем слепо что-то скопировать (пусть даже идеальный код), по-моему, просто невозможно. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 11:16)
| | Спасибо за веру в мои способности) | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 11:21)
| | приведенный код лучше прикрепить в виде файла, поскольку в окно экрана он не лезет категорически.
И без вставки нового.
Кроме того, изменения нужно делать в том скрипте , который заносит записи, и возможно редактирует списки ключей, если такое поддерживается. | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 11:14)
| | Для новых записей не нужен цикл SELECTа по старым.
Для новой требуется лишь добавить ключи из списка этой записи. | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 11:04)
| | Я не очень разбираюсь в Ваших записях
<функци my(), my1(), myi() - аналоги mysql_query() , mysql_result(mysql_query(),0) и mysql_insert_id(mysql_query()) с соответствующим аккуратным анализом ошибок и вывдачей результатов.
Не знаю как мне убрать SELECT из Вашего скрипта, чтобы ничего не напортить... | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:02)
| | верните свои скрипты в исходное состояние. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 12:10)
| | Мой скрипт так и выглядит
<?php
include ("blocks/bd.php"); /*соединяемся с базой*/
if (isset($_GET['id'])) {$id = $_GET['id'];}
if (!isset($id)) {$id = 1;}
$result = mysql_query ("SELECT * FROM books WHERE id='$id'",$db);
if (!$result)
{
echo "<p>Запрос на выборку данных из базы не прошел. Напишите об этом администратору Late-maestro@ukr.net <br><strong>Код ошибки:</strong></p>";
exit (mysql_error());
}
if (mysql_num_rows($result) > 0)
{
$myrow = mysql_fetch_array($result);
$new_view = $myrow["view"] + 1;
$update = mysql_query ("UPDATE books SET view='$new_view' WHERE id='$id'",$db);
}
else
{
echo "<p>Информация по запросу не может быть извлечена. В таблице нет записей.</p>";
exit();
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html >
<head>
<meta name="Description" content="<?php echo $myrow['meta_d']; ?>" />
<meta name="Keywords" content="<?php echo $myrow['meta_k']; ?>" />
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<title><?php echo $myrow['title']; ?></title>
<meta http-equiv="Content-type" content="text/html; charset=windows-1251" />
<link href="style.css" rel="stylesheet" type="text/css" />
<style type="text/css">
<!--
TABLE {
table-layout: fixed; /* Ячейки фиксированной ширины */
}
-->
</style>
</head>
<body>
<table width="100%" border="0" align="center" cellpadding="0" cellspacing="0" bgcolor="#FFFFFF" class="main_border">
<!--Подключаем шапку-->
<? include("blocks/header.php"); ?>
<td ><div align="center">
<table width="100%" cellpadding="0" cellspacing="0">
<tr>
<!--левую часть-->
<? include ("blocks/lefttd.php"); ?>
<td width="63%" valign="top"><? include ("blocks/nav.php");?><p>
<?
printf ("
<h2 font-size:18px; font-weight:bold; class='view_title'>%s</h2>
<img alt='%s' title='%s' class='mini_books' align='left' src='%s'>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span></br>
<span class='lesson_add'>Дата добавления: %s</span><br>
<span class='lesson_add'>Просмотров: %s</span></br>
<span class='lesson_add'>Размер: %s Кб</span></br>
<span class='lesson_add'>Закачек: %s</span>
<p style='font-size:10px; text-align:left; color:#808080;'><span style='font-weight:bold; color:#808080;'>Книга найдена по ключевым словам:</span> %s</p>
<p class='lesson_left'>%s</p>
<span class='lesson_add'><a style='font-size:12px; text-align:left; font-weight:bold; color:#cc0000' href='download.php?id=%s'>Скачать '%s'</a></span></p> <p class='lesson_left'>%s</p>
<p class='lesson_left'>%s</p>",$myrow["title"],$myrow["alt"],$myrow["titleimg"],$myrow["mini_img"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["kluch"],$myrow["text"],$myrow["id"],$myrow["title"],$myrow["link_ru"],$myrow["link_ua"]);
?>
.
<form action="download.php" method="post" name="vv">
<p class="pvot">Поставить оценку: 1 <input name="score" type="radio" value="1" /> 2 <input name="score" type="radio" value="2" /> 3 <input name="score" type="radio" value="3" /> 4 <input name="score" type="radio" value="4" /> 5 <input name="score" type="radio" value="5" checked/>
<input class="sub_vote" name="submit" type="submit" value="Оценить" />
<input name="id" type="hidden" value="<? echo "$id";?>" />
</p>
</form>
<? for($res = my("SELECT * FROM books"); $row = mysql_fetch_assoc($res); )
{
$id = $row['id'];
$list = explode(',', $row['kluch']);
foreach($list as $word)
add_key(trim($word), $id, "key", "book_key");
}
function add_key($word, $id, $keytable, $linktable)
{
$word = "'".mysql_escape_string($word)."'";
$id = intval($id);
$key_id = myi("INSERT IGNORE INTO `$keytable` (`word`) VALUES ($word)");
if(!$key_id)
$key_id = my1("SELECT id FROM `$keytable` WHERE `word` = $word");
$key_id = intval($key_id);
my("INSERT INTO `$linktable` (key_id, obj_id) VALUES($key_id, $id)");
} ?>
<?php
function my($sql)
{
$res = mysql_query($sql);
if(!$res)
exit("error in: <hr> ".nl2br(htmlspecialchars($sql))."<hr>".mysql_error());
return $res;
}
function my0($sql)
{ $res = my($sql); return mysql_num_rows($res) ? mysql_fetch_array($res) : 0;}
function my1($sql)
{ $row = my0($sql); return is_array($row)? $row[0] : 0; }
function myi($sql)
{ $res = my($sql); return mysql_affected_rows() ? mysql_insert_id() : 0; }
?>
<?
echo "<p class='post_comment'>Комментарии:</p>";
$result3 = mysql_query ("SELECT * FROM comments_books WHERE post='$id'",$db);
if (mysql_num_rows ($result3) > 0)
{
$myrow3 = mysql_fetch_array($result3);
do
{
printf ("<div class='post_div'><p class='post_comment_add'>Комментарий добавил(а): <strong>%s </strong><br> Дата: <strong> %s</strong></p><p class='post_comment_addd'> %s</p></div>",$myrow3["author"], $myrow3["date"], $myrow3["text"]);
}
while ($myrow3 = mysql_fetch_array($result3));
}
$result4 = mysql_query ("SELECT img FROM comments_setting",$db);
$myrow4 = mysql_fetch_array ($result4);
?>
<p class='post_comment'>Добавить Ваш комментарий или пожаловаться на битую ссылку:</p>
<form action="comment_books.php" method="post" name="form_com">
<p class='post_comment_add'><label>Ваше имя: </label><input name="author" type="text" size="42" maxlength="40" /></p>
<p class='post_comment_add'><label>Текст комментария: <br><textarea name="text" cols="40" rows="4"></textarea></label></p>
<p class='post_comment_add'>Введите сумму чисел с картинки</p>
<p class='post_comment_add' ><img style='margin-top:9px;' src="<? echo $myrow4["img"]; ?>" alt="Финансовая грамотность" width="58" height="31" />
<input style='margin-bottom:10px;' name="pr" type="text" size="5" maxlength="5" /></p>
<input name="id" type="hidden" value="<? echo $id; ?>" />
<p class='post_comment_add' ><input name="sub_com" type="submit" value="Комментировать" /></p>
</form>
</p>
.
</td>
<!--Подключаем правую часть-->
<div align="center">
<? include("blocks/pravtd.php"); ?>
</div>
</tr>
</table>
</div></td>
</tr>
<!--Подключаем низ-->
<? include ("blocks/footer.php")?>
</table>
</body>
</html>
|
| |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:17)
| | В этом скрипте нет ни одного SQL-оператора INSERT
Как он вообще может что-то добавлять в базу?
Кроме того, мои строки из него нужно удалить. Все.
Не потому что жалко, а потому что в нем они будут нарушать логику работы.
Они не для него писались. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 12:21)
| | Я их уже вынесла в файл key.php и подключила через
<? include ("key.php");?> | |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:24)
| | так и подключение нужно убрать.
В таком виде его оставлять смысла нет.
Вы не ответили на вопрос - какой скрипт у Вас добавляет в таблицу строку о книге?
Или хотя бы формирует значение поля kluch ?
Вностить изменения придется в нем. | |
|
|
|
|
|
|
|
для: Trianon
(13.08.2009 в 12:27)
| | Конечно не имеет, он же мне выдает всю ту же ошибку(
Вот этот скрипт выводит данные о книге
<?
printf ("
<h2 font-size:18px; font-weight:bold; class='view_title'>%s</h2>
<img alt='%s' title='%s' class='mini_books' align='left' src='%s'>
<p class='lesson_left'><span class='lesson_add'>Автор: %s</span></br>
<span class='lesson_add'>Дата добавления: %s</span><br>
<span class='lesson_add'>Просмотров: %s</span></br>
<span class='lesson_add'>Размер: %s Кб</span></br>
<span class='lesson_add'>Закачек: %s</span>
<p style='font-size:10px; text-align:left; color:#808080;'><span style='font-weight:bold; color:#808080;'>Книга найдена по ключевым словам:</span> %s</p>
<p class='lesson_left'>%s</p>
<span class='lesson_add'><a style='font-size:12px; text-align:left; font-weight:bold; color:#cc0000' href='download.php?id=%s'>Скачать '%s'</a></span></p> <p class='lesson_left'>%s</p>
<p class='lesson_left'>%s</p>",$myrow["title"],$myrow["alt"],$myrow["titleimg"],$myrow["mini_img"],$myrow["author"],$myrow["date"],$myrow["view"],$myrow["size"],$myrow["zaka"],$myrow["kluch"],$myrow["text"],$myrow["id"],$myrow["title"],$myrow["link_ru"],$myrow["link_ua"]);
?>
|
| |
|
|
|
|
|
|
|
для: hitball
(13.08.2009 в 12:28)
| | Создайте, пожалуйста, еще одну тему - эта слишком длинная уже.
Откуда взялись эти данные в таблице БД? | |
|
|
|
|