Php 从关联的Toxi表中检索数据
我正在用一个典型的MySQL查询检索我的部分站点数据,并从我的主表中回显来自各个字段等的结果,主表的结构并不重要,但有一个唯一的id,即“job_id” 为了将多个类别与“工作id”关联,我采用了一种toxi解决方案,将类别与每个“工作id”关联Php 从关联的Toxi表中检索数据,php,mysql,relational-database,Php,Mysql,Relational Database,我正在用一个典型的MySQL查询检索我的部分站点数据,并从我的主表中回显来自各个字段等的结果,主表的结构并不重要,但有一个唯一的id,即“job_id” 为了将多个类别与“工作id”关联,我采用了一种toxi解决方案,将类别与每个“工作id”关联 TABLE `tags` ( `tag_id` INT NOT NULL AUTO_INCREMENT, `tag_name` VARCHAR(20) NOT NULL, PRIMARY KEY (`tag_id`) ) CREATE TABLE
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所匹配的所有类别
下面的查询仅返回列出作业id所针对的第一个catagorytag\u名称,此时最多应为六个:
$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'];?>
有人能解释一下我是如何让所有的分类名称呼应出来的,而不仅仅是第一个吗?
谢谢
丹
顺便说一句,向mu道歉的时间太短了,当我在上面有虚假/不完整的信息时,他很友好地回答了我的问题。如果你只想列出类别名称,那么你可以使用如下方式:
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子句。这将为您提供业务中常见的内容,以及cats中以逗号分隔的列表形式列出的类别名称
如果您还需要类别ID,那么两个查询可能更好:一个用于获取业务信息,另一个用于收集类别:
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是以逗号分隔的业务ID值列表。然后你就可以在客户端解决问题。不,这只是我需要/想要的分类名称。谢谢所以我只需在上面插入我当前的Where查询,那么“cats”是我回显的一个变量,或者我该如何处理它?再次感谢,Dan@Dan:好的,只要加上你的WHERE,猫就会像其他专栏一样出现。太棒了。我会试一试,希望能尽快把答案记下来。非常感谢你的帮助。丹尼编辑了我的问题,并在自己身上做了更多的工作。抱歉没有早点这么做。Dan@Dan:那么问题出在PHP中了?您应该能够在$cats=mysql\u fetch\u assoc$result{…时获取所有六行。