我有一个可以标记图像的数据库。
要标记它们,我将一个值(代表一种颜色)放在名为Tagged
的数据库表中标记
ImgId (example 5)
TagId (example 3)
我还有一个名为Tags(颜色)的表
代码
TagId (example 3)
Tag (example blue)
带有标签的列表中几乎有20个标签。
我所拥有的是带有图像的页面,因此1页是imageid 5
如果我打开页面,我想要一个来自标签
的所有标签的列表如果TagId位于Tagged中,则必须类似于
TagId已选中
其他只是
TAGID
我该怎么做。
我有数据库工作来标记图像,但我不能让它'看'如果使用标签。
我有什么:
$sql = "SELECT *
FROM Tags";
$result = mysql_query("$sql");
while($row = mysql_fetch_array($result))
{
echo "<input type=\"checkbox\" name=\"color[]\" value=\"".$row['TagId']."\">";
echo $row['TagId'];
echo "<br>";
}
我猜我需要加入或什么是最好的方法?
PS我知道我应该使用mysqli,但我现在使用mysql进行测试,我稍后将其调整为mysqli
答案 0 :(得分:3)
您可以使用LEFT JOIN
和GROUP BY
对数据库进行一次查询并获得完整的结果;
SELECT Tag, COUNT(ImgId) selected
FROM TAGS
LEFT JOIN TAGGED
ON tags.TagId = TAGGED.TagId
AND TAGGED.ImgId = 5
GROUP BY Tag;
简短说明;
我使用LEFT JOIN
选择所有tags
以及tagged
中所有可能匹配的条目ImgId=5
。如果没有匹配,则ImgId
的值为NULL,如果匹配,则为5.这是LEFT JOIN
的一项功能。
然后我计算每个标签ImgId
的数量(COUNT和GROUP BY这样做)。 NULL不计数,因此计数变为0,而5计数并给出计数1(记住,我们仅限于单个ImgId上的命中,5)。
答案 1 :(得分:0)
试
$sqlTagged = "SELECT TagId
FROM Tagged WHERE ImgId=".$YouImgId;
$result = mysql_query($sqlTagged);
$arrTagged = array();
while($row = mysql_fetch_array($result))
{
$arrTagged[] = $row["TagId"];
}
$sql = "SELECT *
FROM Tags";
$result = mysql_query("$sql");
while($row = mysql_fetch_array($result))
{
$selected = (in_array($row['TagId'],$arrTagged) ? "checked='checked'" : "";
echo "<input type=\"checkbox\" name=\"color[]\" ".$selected." value=\"".$row['TagId']."\">";
}