0

我正在使用 mysql 和 php 创建一个照片标记项目,它不仅向照片添加标签,而且还返回我存储在数据库中的相关标签。我几乎完成了我的项目(有点),只是停留在我上传照片时必须返回相关标签的部分。

我的数据库称为标记器,我有两个表“图像”(ImageId,Name,TagId)和“tag”(ID,Tag)。

我有 3 个 php 页面 database.php、index.php(我在其中上传带有标签的图像)和 show.php 我上传带有标签的图像没有问题,但我也想以返回相关标签的方式制作它. 例如,如果我上传了一张婴儿照片,并在上传时添加了标签“婴儿微笑”,它会在“婴儿微笑儿童笑”旁边写上。我不知道该怎么做。

这是我的 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>

例如,我是否必须添加一个名为“同义词”的全新表格?我完全迷路了,任何帮助将不胜感激。如果你们需要查看其他两页的代码,我也会展示这些代码。谢谢。

4

1 回答 1

0

您的数据库架构看起来只能为图像添加一个标签,但您在描述中使用“标签”。让我们假设这是您的表模式 Image:(ImageId,Name)和 Tag(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

您的结果将是:(标签,相关标签,连接)

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

这样,您可以创建一个表格,显示哪些标签一起出现在 5 个或更多图像中。

于 2012-05-14T11:20:16.730 回答