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