0

私はmysqlとphpの両方にかなり慣れていないので、まだ頭を悩ませているところですので、ご容赦ください。

私は基本的に、ユーザーがトピックを作成し、タグワードをトピックにタグ付けできるサイトを持っています。テーブルに参加しようとしているので、POSTS をクエリすると、そこにタグ情報も表示されます。

"SELECT u.user_id, u.username, u.profile, topic_tags.tag_id, tags.tag_id, tags.tags,
       p.post_id, p.post_content, p.post_date, p.post_topic, p.post_by, p.invisipost 
FROM `posts` p
JOIN `users` u on p.post_by = u.user_id
JOIN `topics` t on p.post_topic = t.topic_id
WHERE p.post_topic='$id'
INNER JOIN `tags` ON topic_tags.tag_id = tags.tag_id
INNER JOIN `topic_tags` ON topics.topic_id = topic_tag.tag_id
WHERE topic_tags.tag_id = topics.topic_id";

私が言ったように、私はこれに非常に慣れていないので、何かアドバイスを提供できれば、とても感謝しています.

編集:タグを呼び出すコードは次のとおりです

<?php
        $topic_id = $rows['topic_id'];
        $sql=mysql_query("SELECT * FROM topic_tags WHERE `topic_id`='{$topic_id}'");
        while($rowd=mysql_fetch_array($sql))
        {   
            $tag_id = $rowd['tag_id'];
            $fetch_name = mysql_fetch_object(mysql_query("SELECT * FROM `tags` WHERE `tag_id`='{$tag_id}'"));
        ?>
            <div id="topic-tagged"><?php echo ucwords($fetch_name->tags);?></div> 
        <?php
        }       
        ?>
4

2 に答える 2

2

すべての場所は最後にある必要があります。

SELECT u.user_id, u.username, u.profile, 
topic_tags.tag_id, tags.tag_id, tags.tags,
   p.post_id, p.post_content, p.post_date, 
 p.post_topic, p.post_by, p.invisipost 
FROM `posts` p
JOIN `users` u on p.post_by = u.user_id
JOIN `topics` t on p.post_topic = t.topic_id
INNER JOIN `tags` ON topic_tags.tag_id = tags.tag_id
INNER JOIN `topic_tags` ON topics.topic_id = topic_tag.tag_id
WHERE p.post_topic='$id' and topic_tags.tag_id = topics.topic_id

これは、元の質問に基づいて修正されたクエリ ステートメントです。ただし、最後の部分が正しいかどうかはまだわかりません。これをデータベースで直接実行して、必要な結果が得られるかどうかを確認してください。

于 2013-07-23T01:10:25.693 に答える
0

SQL を記述する際には、いくつかのルールがあります。句は句のwhere後に来fromます。さらに、テーブルは、句に配置されたonにのみ句内で参照できます。また、クエリには 1 つのステートメントと 1つのステートメントしかありません。すべての がステートメントに配置されます。fromfromwherejoinfrom

2 つの良い方法は、テーブルの省略形であるテーブル エイリアスを使用することです (これは時々行います)。そして、 と を混ぜないでjoinくださいinner join。これらは同義語ですが、クエリで使用できるのは 1 つのみです。

SELECT u.user_id, u.username, u.profile, tt.tag_id, ta.tag_id, ta.tags,
       p.post_id, p.post_content, p.post_date, p.post_topic, p.post_by, p.invisipost 
FROM `posts` p join
     `users` u
      on p.post_by = u.user_id join
     `topic_tags` tt
      ON p.post_topic = tt.topic_id join
     `tags` ta
     ON tt.tag_id = ta.tag_id
WHERE p.post_topic='$id';

最後に、私はあなたが望んでいないと確信していますand tt.tag_id = topics.topic_id。これは a と a を比較しtag_idていtopic_idます。それらは同じことを指しているわけではありません。join上記の s でクエリには十分だと思います。

于 2013-07-23T01:21:29.883 に答える