我在使用 mysql_fetch_assoc
脚本时遇到了一些问题,希望您能提供帮助。
背景: 我正在使用典型的 MySQL 查询检索我网站的一部分的数据,并从我的主表中回显来自各个字段等的结果,其结构不重要但具有唯一的 ID,即“job_id”
为了让多个类别与该“job_id”相关联,我采用了 toxi 解决方案,将类别与每个“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 匹配的所有类别,其 ID 使用:
$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);
在我的代码中,我使用它来回显匹配的目录:
<p>Job Catagories | <?php while ($cats=mysql_fetch_assoc($result)) { echo $cats['tag_name'];}?></p>
我有两个问题:
- 上面的回显似乎完全忽略了第一个标签名称,所以如果一个工作被标记为六个类别,它只回显五个。如果一份工作只有一个标签,我什么也得不到。该查询在 SQL shell 中有效,因此我假设问题出在 PHP 中。
- 当我收到多个回显时,我希望能够用逗号或 | 将它们分隔开,但我不熟悉在查询中使用
group_concat
,所以我也可以使用一些在那里帮忙。
最佳答案
因为在 while 循环之前已经调用了 mysql_fetch_assoc 一次,所以第一行总是被丢弃。
这应该可以解决您的问题:
$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());
<p>Job Catagories |
<?php
$first = true;
while ($cats=mysql_fetch_assoc($result)) {
if($first){
$first = false;
} else{
echo ", ";
}
echo $cats['tag_name'];
}
?>
</p>
关于php - mysql_fetch_assoc 的问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6903897/