php - mysql_fetch_assoc 的问题

标签 php mysql

我在使用 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>

我有两个问题:

  1. 上面的回显似乎完全忽略了第一个标签名称,所以如果一个工作被标记为六个类别,它只回显五个。如果一份工作只有一个标签,我什么也得不到。该查询在 SQL shell 中有效,因此我假设问题出在 PHP 中。
  2. 当我收到多个回显时,我希望能够用逗号或 | 将它们分隔开,但我不熟悉在查询中使用 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/

相关文章:

mysql - SQL统计未持有学历人数

PHP session 权限问题

javascript - Laravel 路线生成

php - 数据库设计: best practice for designing a forum table

mysql - 简单查询 - 为什么会抛出错误?

php - 单击时将日期和时间保存到 mysql

mysql - sql检查select返回null

php - 防止 Doctrine 1 创建外键约束

javascript - 在 JavaScript 函数中创建表单?

mysql - 连接到数据库 Perl