2012-05-14 3 views
0

Я создаю проект пометки фотографий с использованием mysql и php, который не только добавляет теги к фотографиям, но также возвращает связанные теги, которые я сохранил в моей базе данных. Я почти выполнил свой проект (вроде), просто застрял в той части, где мне нужно вернуть связанные теги, когда я загружаю фотографии.smart tagging project mysql php

Моя база данных называется tagger, и у меня есть две таблицы «image» (ImageId, Name, TagId) и «tag» (ID, Tag).

У меня есть 3 страницы php database.php, index.php (где я загружаю изображение с тегом), и show.php у меня нет проблем с загрузкой изображений с помощью тегов, но я также хочу сделать это так, связанных с тегами. Например, если я загрузил изображение ребенка и добавил тег «baby smile», когда я его загрузил, он будет писать рядом с «смехом ребенка». Я не знаю, как это сделать.

Это мой код для show.php:

<? 
require_once('/database.php'); 
$dbconnect = NEW DB_Class('tagger', 'root', ''); 
$query = "SELECT * FROM image, tag WHERE image.TagID = tag.ID"; 
$result = $dbconnect->fetch($query); 
echo "<table border='2'>"; 
foreach ($result as $record) 
{ 
echo "<tr>"; 
echo "<td>"; 
echo "<a href='images/".$record['Name']."' target='_blank'> 
<img src='images/".$record['Name']."' alt='SSsss' height='120' width='120' /></a>"; 
echo "</td>"; 
echo "<td>"; 
echo $record['Tag']; 
echo "</td>"; 
echo "</tr>"; 
} 
echo "</table>"; 
?> 

<form name="newad" method="post" enctype="multipart/form-data" 
action=""> 

<table align="center" > 
<tr> 
<td> <h2>Image to upload: </h2> </td> 
<td><input type="file" name="image"></td> 
</tr> 
<tr> 
<td><h2>Tags:</h2></td> 
<td><input type="text" name="tags"/></td> 
</tr> 
<tr> 
<td></td> 

<td><input name="Submit" type="submit" value="Upload image" style="width 120px;  height: 70px;font-size:20px"></td> 
</form> 
</tr> 
<br/> 
</table> 

</form> 

бы я должен добавить, как целый новый стол под названием «синонимы», например? Я полностью потерян, любая помощь будет высоко оценена. Если вам нужно увидеть коды для двух других страниц, я покажу их. Благодарю.

+0

Поскольку вы не можете быть на сто процентов уверены в том, что пользователь будет отмечать для определенной фотографии, вместо добавления вашего предложения во введенный тег, вы можете предоставить пользователю набор связанных тегов на основе того, какой тег он ввел. –

+0

Вам нужно использовать поисковую систему, такую ​​как Solr – Petah

ответ

0

Ваша схема базы данных выглядит так, что вы можете добавить только один тег для изображения, но вы используете «теги» в своем описании. Предположим, что это ваша схема таблицы. Изображение: (ImageId, Name) и тег (TagId, ImageId, Tag). При необходимости внесите соответствующие изменения.

Теперь создайте таблицу синонимов как таблицу с кешем, которую можно обновить с помощью задания cron.

SELECT rel.Tag as related_tag, tag.Tag as tag, COUNT(tag.Tag) as connections 
FROM tags rel 
LEFT JOIN tags tag ON tag.ImageId = rel.ImageId 
GROUP BY tag.Tag 
WHERE COUNT(tag.Tag) > 5 -- Use $image_count/10 or 100 or other appropriate value 

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

Так что, если ваша таблица выглядит следующим образом

1, 1, baby 
2, 2, car 
3, 1, smile 
4, 1, laugh 
5, 1, child 
6, 2, baby 
7, 2, child 

Ваш результат будет: (тег, related_tag, соединения)

baby, smile, 1 
baby, laugh, 1 
baby, child, 2 
smile, baby, 1 
smile, laugh, 1 
... 

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

:
+0

OK Спасибо большое. Я попробую это. Но у меня также есть другая проблема, всякий раз, когда я нажимаю на изображение, оно переходит на новую вкладку. Я хочу, чтобы он перешел на новую страницу. Должен ли я изменить весь код на show.php? – user1393436

+0

Тот факт, что target = "_ blank" открывает изображение в новом, является настройкой браузера. Пользователи выбирают, чтобы открыть контент, предназначенный в новом окне, на новой вкладке. Если вы не хотите открывать в новом окне, используйте javascript window.open, но некоторые интеллектуальные браузеры (например, хром) могут открыть его на новой вкладке. – ther

+0

Большое спасибо. Вы очень помогли. – user1393436