2013-12-20 96 views
0

這裏是我的數據庫:如何檢索基於ques_id的liker id?

id | liker | ques_id 
1 | 15 | 2342 
2 | 22 | 2342 
3 | 22 | 2311 
4 | 15 | 2389 

我需要得到的是所有誰喜歡ques_id了類似器的。所以結果應該是這個樣子:

Question 2342 has been liked by 15 and 22. 
Question 2311 has been liked by 22 and so on 

我當前的代碼生成單獨的一行代表一個類似器和ques_id

$sqlq=mysql_query("SELECT * FROM likes"); 
while($rowq=mysql_fetch_array($sqlq)){ 
    $qid=$rowq['ques_id']; 

    $sql=mysql_query("SELECT * FROM likes where ques_id='$qid'"); 
    $num=mysql_num_rows($sql); 
    $cont=''; 

    while($row=mysql_fetch_array($sql)){ 
    $liker=$row['liker']; 
    $cont .="$qid being liked by $liker<br>"; 
    } 
    echo $cont; 
} 
+0

根據我的建議更改您的查詢,並且您只有一個循環來處理行並根據需要輸出字符串。 – Cez

回答

0

我沒有測試過這一點,但它應該讓你開始:

$sqlq=mysql_query("SELECT DISTINCT(ques_id) FROM likes"); 
$cont=''; 
while($rowq=mysql_fetch_array($sqlq)){ 
    $qid=$rowq['ques_id']; 

    $sql=mysql_query("SELECT * FROM likes where ques_id='$qid'"); 
    $num=mysql_num_rows($sql); 
    $row=mysql_fetch_array($sql) 
    $cont .= "$qid being liked by $liker "; 

    while($row=mysql_fetch_array($sql)){ 
    $liker=$row['liker']; 
    $cont .= " and $liker"; 
    } 
    $cont .= ".<br>"; 
} 
echo $cont; 
+0

有一個問題,因爲代碼重複相同的ques_id每次它在SQL中發現它...我需要ques_id只輸出一次,雖然它在DB中的兩個或多個行 – user3047285

+0

好吧,將此添加到第一個查詢: 「DISTINCT (ques_id)「我將它添加到我的代碼中。 – Sim0n222

+0

現在作品非常好,非常感謝! – user3047285

0

你不需要對數據庫進行第二次查詢,它足夠迭代第一個結果。 例如,您可以收集所有的likers,比賽以ASSOC陣列鍵特定ques_id被ques_id,像這樣:

$mathces = array(); 
$sqlq=mysql_query("SELECT * FROM likes"); 
while($rowq=mysql_fetch_array($sqlq)){ 
    $qid=$rowq['ques_id']; 
    $liker=$rowq['liker']; 

    $matches[ $qid ][] = $liker; 
} 

然後,您可以的foreach $mathces陣列,並建立您的字符串。

foreach ($matches as $qid => $likers) { 
    $cont .= "$qid being liked by " . implode(' and ', $likers); 
    if (count($likers) == 1) 
    $cont .= ' and so on'; 
    echo "$cont<br>"; 
} 

我沒有測試我的代碼。它需要額外的驗證(例如,用於在$linkers第二環路)

+0

它不起作用:( – user3047285

+0

究竟是什麼?什麼輸出? – theDilletante

+0

2342被15和22所喜歡 2342被15和222341所喜歡被15和22所喜歡 2342被喜歡15和222341被15所喜歡,222356被15所喜歡等等 2342被15所喜歡,222341被15所喜歡,222356被15所喜歡等等2312被22所喜歡等等 2342被15所喜歡222341被15所喜歡,222356被15所喜歡等等2312被22所喜歡等等2311被22所喜歡等等 它輸出類似這樣的代碼長得多......沒有多大意義 – user3047285

0
SELECT GROUP_CONCAT(liker), ques_id FROM likes GROUP BY ques_id 

這將拉動每個ques_id分組在一起每個類似器。 然後您只需處理返回的行。

您應該避開mysql extension,因爲它已被棄用;改爲使用PDOmysqli

$sql = 'SELECT GROUP_CONCAT(liker) as likes, ques_id FROM likes GROUP BY ques_id'; 
foreach ($conn->query($sql) as $row) { 
    printf('Question %s is liked by %s', $row['ques_id'], $row['likes']); 
}