我正在使用mysql和php创建一个照片标记项目,它不仅可以为照片添加标签,还可以返回我存储在我的数据库中的相关标签。我几乎完成了我的项目(有点),只是在我上传照片时必须返回相关标签的部分。
我的数据库名为tagger,我有两个表“image”(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>
我是否必须添加一个名为“同义词”的全新表格?我完全迷失了,任何帮助都会非常感激。如果你们需要查看其他两页的代码,我也会展示这些代码。感谢。
答案 0 :(得分: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
您的结果将是: (标签,related_tag,连接)
baby, smile, 1
baby, laugh, 1
baby, child, 2
smile, baby, 1
smile, laugh, 1
...
通过这种方式,您可以创建一个表格,显示哪些标签一起显示在5个或更多图像中。