我正在使用典型的MySQL查询检索我的部分网站的数据,并从我的主表中回显各种字段等的结果,其结构不重要但具有唯一ID,即'job_id'< / p>
为了让多个类别与'job_id'相关联,我使用了一个toxi解决方案,将catgories与每个'job_id'相关联。
TABLE `tags` (
`tag_id` INT NOT NULL AUTO_INCREMENT,
`tag_name` VARCHAR(20) NOT NULL,
PRIMARY KEY (`tag_id`)
)
CREATE TABLE `tag_relational` (
`job_id` INT NOT NULL,
`tag_id` INT NOT NULL
)
我想要做的是,当我回显主表中的信息时(使用'job_id'),我还想回显所有与job_id匹配的类别。
下面的查询只返回列出job_id的第一个catagory(tag_name),最多应该是六个(此时):
$query = "SELECT * FROM tags t
JOIN tag_relational r
ON t.tag_id=r.tag_id
WHERE r.job_id = $job_id";
$result=mysql_query($query) or die(mysql_error());
$cats=mysql_fetch_assoc($result);
在我的代码中,我使用它来回应匹配的类别:
<?php echo $cats['tag_name'];?>
有人可以解释我怎么能得到所有的catagory名称而不仅仅是第一个? 谢谢 丹
顺便说一句,对于 mu太短道歉,当我上面有虚假/不完整的信息时,他很友好地回答了我的问题。答案 0 :(得分:0)
如果您只想列出类别名称,那么您可以使用group_concat
这样的类型:
select b.*,
group_concat(c.category_name order by c.category_name separator ' ,') as cats
from business b
join tbl_works_categories w on b.id = w.bus_id
join categories c on w.category_id = c.category_name
where ...
group by b.id
当然,你需要一个合适的WHERE子句。这将为您提供business
中的常用内容以及cats
中类别名称作为逗号分隔列表。
如果您还需要类别ID,那么两个查询可能会更好:一个用于获取business
信息,另一个用于收集类别:
select w.bus_id, c.category_id, c.category_name
from tbl_works_categories w
join categories c
where w.bus_id IN (X)
其中X
是逗号分隔的business
ID值列表。然后你就可以在客户端进行补丁了。