[英]SQL JOIN get name and all tags for item
这是我的第一个JOIN子句,确实遇到了问题。 我想回显我的商品的所有必要信息,但是我不了解如何回显某个商品的所有标签,现在我会得到一个列表,其中包含重复的商品,但如果为一个商品分配了多个标签,则具有不同的商品标签项目。 有任何想法吗? 更好地做到这一点的方法也受到高度赞赏。
$query = "SELECT categories.id, categories.category, spots.spot_name, spots.category_id, spots.description, spots.slug, districts.id, districts.district, tags.spot_id, tags.tag ".
"FROM categories, spots, districts, tags ".
"WHERE categories.id = spots.category_id AND districts.id = spots.district_id AND tags.spot_id = spots.id";
$result = mysql_query($query);
if (!$result) {
die('Invalid query: ' . mysql_error());
}
while ($row = @mysql_fetch_array($result)){
echo '<tr><td style="background:#000; color:#ccc;" class="tooltip" title="'.$row["description"].'Tags: '.$row["tag"].'"><a style="color:#fff;" href="/'.$row["slug"].'">'.$row["spot_name"].'</a></td>
<td>'.$row["category"].'</td>
<td>'.$row["district"].'</td>
<td>****</td>
</tr>
';
}
太感谢了,
安德斯
更改查询并添加左联接,如下所示:$ query =“ SELECT c.id,c.category,s.spot_name,s.category_id,s.description”。 “ s.slug,d.id,d.district,t.spot_id,t.tag”。 “来自类别AS c,地点AS s,区域AS d”。 “在t.spot_id为t ON时加入标签”。 “在哪里c.id = s.category_id和d.id = s.district_id”;
这是查询看起来更好看的样子:
SELECT c.id, c.category, s.spot_name, s.category_id, s.description, s.slug, d.id, d.district, t.spot_id, t.tag
FROM spots AS s
LEFT JOIN categories AS c ON c.id = s.category_id
LEFT JOIN districts AS d ON d.id = s.district_id
LEFT JOIN tags AS t ON t.spot_id = s.id
要获得所有位置,您要发出此查询:
SELECT c.id, c.category, s.spot_name, s.category_id, s.description, s.slug, d.id, d.district
FROM spots AS s
LEFT JOIN categories AS c ON c.id = s.category_id
LEFT JOIN districts AS d ON d.id = s.district_id
现在,您可以遍历所有地点并获取其标签:
'SELECT t.tag FROM tags WHERE t.spot_id = '. (int)$spot_id
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.