|
|
|
|
|
для: hitball
(19.10.2012 в 16:35)
| | Значит либо выбирайте уникальные значения по этому ключу, либо те у которых эти ключи не равны. Хотя все это за гранью моего понимания - каким образом некий добавленный ключ может определить похожесть?
"Мама мыла раму" и "Мать вымыла окно" - слова разные, но суть одна, значит можно считать, что похоже. Но определить это, это несколько сложнее операция, чем добавления какого-то ключа не известно по какому признаку. Но мало того, ведь эти два предложения могут быть только что добавленными, и оба являются свежими новостями. Встает вопрос, а какое из низ имеет больше шансов быть показанным и на каком основании, если они похожи? | |
|
|
|
|
|
|
|
для: confirm
(19.10.2012 в 16:31)
| | похожесть определяется за счет строки kluch в таблицу books
были созданы 2 таблицы для связки и заполнены ключами из таблицы books
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`)
);
|
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)");
}
|
| |
|
|
|
|
|
|
|
для: hitball
(19.10.2012 в 16:09)
| | А чем определяется похожесть? Или ее предстоит определить? | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 14:43)
| | добрый день! в одном из обсуждений этой темы встречался такой код
$sql = "
SELECT t3.*
FROM book_key t1
JOIN book_key t2 ON t1.key_id = t2.key_id
JOIN books t3 ON t2.obj_id = t3.id
WHERE t1.obj_id = ". (int)($myrow['id']). " LIMIT 4
";
|
подскажите, пожалуйста как запретить вывод по id новости под которой выводятся похожие, а то получается, что новость к которой выводятся похожие, тоже выводится в списке...
заранее спасибище! | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 14:43)
| | Ну при чем тут программирование на этапе представления данных в таблице. До программирования пока далеко )
Содержимое вашей сумочки можно ведь тоже двояко описать, а как лучше, будет зависеть от целей. ;-) | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 13:49)
| | понимаю, что хорошему программисту это дублирование кажеться абсурдом, но мне оно нужно для того, чтобы не мучиться с таблицами размерностей, если я буду еще и о них думать, то запутаюсь окончательно((( мне легче так все наполнить)
к тому же основных ингридиентов, которые должны быть в форме, у меня не больше 20 штук | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 13:04)
| | Не понял смысла этого копирования, вернее дублирования ингридиентов в другом поле.
Я не повар, но я так представляю. В некой категории блюд, рецепт, который начинается кратким описанием. Далее идет состав его, причем не куриное бедро без кожи и маленькая луковица, а:
мясо курицы
лук
....
А вот уже далее, в описание "технологии" приготовления этого блюда:
Взять куриное бедро, без кожи, одну маленькую луковицу....
Следующим, это рекомендации как подавать блюдо на стол:
Блюдо подается охлажденным. Принимать блюдо рекомендуется под "Шато Петрюс" урожая 2005 г....
Ингридиенты, это не просто некое дублирующее поле в таблице рецептов, это таблица, с полями описывающими продукты рецептов, например, мясо:
id category name calorie info
1 1 мясо курицы 50
2 1 говядина 100
....
категория овощей:
3 2 лук 10
4 2 чеснок 10
...
то есть, id ингридиента, категория ингридиентов (для сортировки), наименование, калорийность в грамме, и возможно даже некая интересно-огородная информация о продукте (info).
В этом случае состав рецепта будет выглядеть так:
1 (мясо курицы, количество не указано, в данном рецепте, в ином случае можно вывести калорийную составляющую этого продукта в рецепте, и общую для блюда).
3 (лук)
....
и т.д.
То есть сами рецепты, это наборы id соответствующих игридиентов, а не текстовое поле, тогда и форма поиска по id выглядит вполне логично. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 12:45)
| | да, я сама буду заносить рецепты в базу, возможно сделаю просто форму для отправки рецептов мне на почту.
у меня в таблице book_eda есть 2 столбца ingridient (здесь я пишу подробный список ингридиентов. Куриное бедро без кожи, маленькая луковица... ) и столбец inger (в него я вручную заношу основные ингридиенты из столбца ingridient (морковь, телятина, курица...))
Ингридиенты из столбца inger специальным скриптом заносятся в таблицу ингридиентов по которой строится форма поиска по ингридиентам key_eda и в таблицу связки book_eda_key.
Вроде бы все же упорядочено? | |
|
|
|
|
|
|
|
для: hitball
(08.03.2010 в 12:29)
| | Если вы сами вводите рецепты, и пользователи к этому никоим образом не будут причастны, то это несколько меняет дело. Но...
Вот у вас рецепт, как раз описывающий его ингридиенты:
Куриное бедро без кожи, маленькая луковица, маленькая морковь,
лавровый лист, перец горошком, зелень, 4 яйца.
В нем все его ингридиенты, это строка. Зачем тогда вообще таблица ингридиентов, если она с самим рецептом не связана? Таблица посика для вашего рецепта должна быть обычным полем ввода, где пользователь будет вводить, например, луковица, морковь... то есть поиск будет текстовый, а не по id, как на указанном вами сайте, так как в вашем рецепте информации о неких ID не содержится.
Дело не в админке как таковой, прежде чем ее писать, у вас должна быть ораганизована таблица, от структуры которой будет зависеть организация и формы админки, и формы посика и другое. У вас же сейчас таблица либо не организована как следует, либо она имеет лишнее, от чего и путаница происходит в вопросах/ответах. | |
|
|
|
|
|
|
|
для: sim5
(08.03.2010 в 12:05)
| | Извините, что отклоняюсь от темы, но возможно прошлый механизм организации книги будет понятнее и проще сделать без этих непонятных терминов)
Расскажу в кратце...
На самом деле у меня уже есть небольшая книга кулинарных рецептов.
Организованая НЕ так как предлагал oliss.
Просто у меня особый случай) Нет админки. Все данные я заношу через PMA...
Там у меня 3 таблицы.
book_eda - это таблица содержащая все рецепты
id int(6) auto_increment
title varchar(255)
meta_k varchar(255)
meta_d varchar(255)
description text
text text
view int(10)
alt varchar(255)
titleimg varchar(255)
cat int(7) (здесь я просто указываю номер
категории из таблицы caterories)
ingridient text (здесь япишу подробный список ингридиентов.
К примеру так
Куриное бедро без кожи, маленькая луковица, маленькая морковь,
лавровый лист, перец горошком, зелень, 4 яйца.
Для домашней лапши: 140 гр. муки, 1 яйцо, 30 гр воды, 4гр соли )
inger text ( здесь я выбираю основные
ингридиенты из графы ingridient, которые будут в форме поиска как на сайте ivon)
mini_img varchar(255)
|
структура таблицы book_eda_key - таблица связки
key_id int(11) (id основных ингридиентов из таблицы key_eda)
obj_id int(11) (id рецепта из таблицы book_eda )
структура таблицы key_eda
id int(11)
word varchar(255) (основные ингридиенты inger)
|
для этого писалась форма поиска
<?php
$ingr='';
$r = mysql_query ("SELECT `id` ,`word` FROM `key_eda` ",$db);
while ($mr = mysql_fetch_assoc($r))
{
$ingr.='<label title="'.htmlspecialchars($mr['word']).'">
<input name="ingredient['.intval($mr['id']).']" value="1" type="checkbox">'.htmlspecialchars($mr['word']).'</input ></label><br/>';
}
?>
<span >Выберите ингредиенты</span>
<form action="" method="post">
<?php echo $ingr; ?>
<input class="button" name="submit" value="Поиск" type="submit">
</form>
<?php
echo'<pre>';
print_r($_POST);
?>
|
но здесь я застопорилась с обработчиком и все( | |
|
|
| |
|