试图加入5个表,有问题

时间:2013-07-23 01:07:19

标签: mysql select

我对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
        }       
        ?>

2 个答案:

答案 0 :(得分: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

这是基于原始问题的更正查询语句。我仍然不确定最后一部分是否正确。您可能希望直接在数据库中运行它,看看是否得到了所需的结果。

答案 1 :(得分:0)

编写SQL时有一些规则。 where子句位于from子句之后。此外,表格只能在on子句中放在from子句中后引用。并且,查询只有一个from语句和一个where语句。所有join都放在from语句中。

两个好的做法是使用表别名(表格的缩写)(有时你会做)。并且,请勿混用joininner 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。这是将tag_idtopic_id进行比较。它们并不是指同一件事。我认为上面显示的join足以满足您的查询要求。