0

我是新手mysql

我想为我的博客开发一个简单的标记系统,并遇到了制作 3 个表格的“毒药”解决方案。

所以,我有3张桌子:

`blog` containing `id` and `title`. 
`blog_tags` containing `id` and `tags_id` and `blog_id`.
`tags` containing `id` and `name`.

tags_id连接到Internal Relation表中idtags同样,blog_id连接到Internal Relation表中idblog

因此,当在我的函数中(我得到与单个博客有关的所有标签的数组)时,我执行一个查询(例如,将博客id作为函数中的参数传递),

    $result = mysql_query("SELECT tags_id FROM blog_tags WHERE blog_id = '".$id."'");
    $tags = array();
    if($result === FALSE) {
        die(mysql_error()); // TODO: better error handling
    }
    while($row = mysql_fetch_assoc($result)) {
        $tags[] = I don't know what should come over here?   
    }
    return $tags;

或者有没有其他方法可以在这个 Toxi 实现中执行查询?

4

1 回答 1

0

更新您需要一个简单的JOIN. 您的查询应如下所示

SELECT bt.tags_id, t.name
  FROM blog_tags bt JOIN tags t
    ON bt.tags_id = t.id
 WHERE bt.blog_id = n -- < n is an id of a blog

这是SQLFiddle演示。

现在php非常简单

$sql = "SELECT bt.tags_id, t.name
          FROM blog_tags bt JOIN tags t
            ON bt.tags_id = t.id
         WHERE bt.blog_id = $id";     
$result = mysql_query($sql);
if($result === FALSE) {
    die(mysql_error()); // TODO: better error handling
}
$tags = array();
while($row = mysql_fetch_assoc($result)) {
    $tags[] = $row['name'];  
}
...

附带说明:切换到 PDO 或 mysqli。mysql_* 扩展名已弃用。在 PDO 中,您可以使用语法糖fetchAll()。更重要的是学会使用准备好的陈述。现在你的代码很容易受到 sql-injections 的攻击。

于 2013-06-08T23:50:05.957 回答