从关联的Toxi表中检索数据

时间:2011-08-01 10:45:33

标签: php mysql relational-database

我正在使用典型的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太短道歉,当我上面有虚假/不完整的信息时,他很友好地回答了我的问题。

1 个答案:

答案 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值列表。然后你就可以在客户端进行补丁了。