0

私は初めてですmysql

ブログ用のシンプルなタグ付けシステムを開発したいと思っていたところ、3 つのテーブルを作成するこの "Toxi" ソリューションに出会いました。

だから、私は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ます。同様に、は表の に接続されています。idtagsblog_idInternal Relationidblog

したがって、私の関数 (単一のブログに関連するすべてのタグの配列を取得する場所) で、たとえばクエリを実行するとき (ブログ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 インジェクションに対して脆弱です。

于 2013-06-08T23:50:05.957 に答える