选择未存在的值

时间:2013-05-03 12:36:35

标签: php

我有一个可以标记图像的数据库。

要标记它们,我将一个值(代表一种颜色)放在名为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

2 个答案:

答案 0 :(得分:3)

您可以使用LEFT JOINGROUP BY对数据库进行一次查询并获得完整的结果;

SELECT Tag, COUNT(ImgId) selected
FROM TAGS 
LEFT JOIN TAGGED
  ON tags.TagId = TAGGED.TagId
 AND TAGGED.ImgId = 5
GROUP BY Tag;

An SQLfiddle to test with

简短说明;

我使用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']."\">";

  }