2011-08-01 21 views
1

我遇到了一個mysql_fetch_assoc腳本,我希望你可以幫忙。問題與mysql_fetch_assoc

背景: 我使用典型的MySQL查詢檢索我的網站的一部分數據,並從我的主表中回顯各個領域等的結果,其結構不重要,但具有唯一的ID是'job_id'

爲了有多個類別與'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」)我也想回音ID使用這是JOB_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,所以我也可以在那裏使用一些幫助。

回答

3

因爲mysql_fetch_assoc在while循環之前已經調用過一次,所以第一行總是被丟棄。

這應該解決您的問題:

$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> 
+0

我愛的人SO。謝謝,這已經完成了問題1的訣竅。我想留下這個問題,看看是否有人可以幫助解決問題2,但是這個問題很重要,謝謝。 – Dan

+0

我想我的編輯,現在也應該解決這個問題。在我完成之前意外地發佈了它。 –

+0

我似乎得到了一個錯誤first = else(unexpected =)? – Dan

0

用隔板,GROUP_CONCAT。看下面的例子

mysql> SELECT student_name, 
     ->  GROUP_CONCAT(DISTINCT test_score 
     ->    ORDER BY test_score DESC SEPARATOR ' ') 
     ->  FROM student 
     ->  GROUP BY student_name;