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

所有的 wheres 都应该在最后:

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子句中from才能在子句中引用。而且,一个查询只有一个from语句和一个where语句。所有joins 都放在from语句中。

两个好的做法是使用作为表缩写的表别名(有时您会这样做)。并且,不要混用joinand inner join。它们是同义词,但在查询中只能使用一个。

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. 这是比较 atag_id和 a topic_id。他们指的不是同一件事。我认为join上面显示的 s 足以满足您的查询。

于 2013-07-23T01:21:29.883 回答