0

mysqlとphpを使用して写真のタグ付けプロジェクトを作成しています。これは、写真にタグを追加するだけでなく、データベースに保存した関連タグも返します。私はプロジェクト(一種)をほぼ完了しました。写真をアップロードするときに関連するタグを返さなければならない部分に固執しました。

私のデータベースはtaggerと呼ばれ、「image」(ImageId、Name、TagId)と「tag」(ID、Tag)の2つのテーブルがあります。

3つのphpページdatabase.php、index.php(タグ付きの画像をアップロードする場所)、およびshow.phpがあります。タグ付きの画像をアップロードするのに問題はありませんが、関連するタグも返すように作成したいと思います。 。たとえば、赤ちゃんの写真をアップロードし、アップロード時に「baby smile」というタグを追加すると、「babysmilechildlaugh」の横に「babysmilechildlaugh」と表示されます。私はそれを行う方法がわかりません。

これは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>

たとえば、「シノニム」と呼ばれるまったく新しいテーブルのように追加する必要がありますか?私は完全に迷子になっています、どんな助けでも大歓迎です。他の2ページのコードを確認する必要がある場合は、それらも表示します。ありがとう。

4

1 に答える 1

0

データベーススキーマは、画像に1つのタグしか追加できないように見えますが、説明に「タグ」を使用しています。これがテーブルスキーマ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つ以上の画像にどのタグが一緒に表示されるかを示すテーブルを作成できます。

于 2012-05-14T11:20:16.730 に答える