2014-05-20 288 views
0

我已經有一段時間了這個問題,可能沒有正確地問上次問題。再次涉獵我仍然非常困惑和卡住。PHP雖然循環在while循環中

我有一個MySQL表,我列出了一系列基於這個值(200左右)的複選框。

我有另一個MySQL表,其中用戶將存儲他們的首選項,當列表加載時,我希望用戶以前在第二個MySQL表中選擇的項目是複選框,該複選框已經分配了指示先前選擇的複選標記。如果你可以請看看下面的內容,並指出我正確的方向,我會很感激。

$result = mysql_query("SELECT `car` FROM `carlist` ORDER BY variety ASC"); 
$result2 = mysql_query("SELECT `car` FROM `lists` WHERE `username` = 'Palendrone' ORDER BY variety ASC"); 

if (!$result) { 
    die("Query to show fields from table failed"); 
} 

if (!$result2) { 
    die("Query to show fields from table failed"); 
} 

$fields_num = mysql_num_fields($result); 
for($i=0; $i<$fields_num; $i++) 
{ 
    $field = mysql_fetch_field($result); 
} 


$fields_num2 = mysql_num_fields($result2); 
for($j=0; $j<$fields_num2; $j++) 
{ 
    $field2 = mysql_fetch_field($result2); 
} 

while($row = mysql_fetch_row($result)) 
{ 

    while($row2 = mysql_fetch_row($result2)) 
    { 

     if("$row2[0]" <> "$row[0]") 
     {?><input type="checkbox" value="<?php echo "$row[0]"?>" name="<?php echo "$row[0]"?>" id="<?php echo "$row[0]"?>"> 
      <label for="<?php echo "$row[0]"?>"><?php echo "$row[0]"?></label> 
      <?php 
     } else 
     {?><input type="checkbox" value="<?php echo "$row[0]"?>" name="<?php echo "$row[0]"?>" checked="yes" id="<?php echo "$row[0]"?>"> 
      <label for="<?php echo "$row[0]"?>"><?php echo "$row[0]"?></label> 
      <?php 
     } 

    } /* end while */ 

} /* end while */ 

我計算第一While循環加載在主200個項目,則對於在該表中的每個輸入它針對在第二用戶選擇表交叉檢查而循環,在該循環我有if語句以相反的順序工作,以便不檢查它然後取消選中它。

我指出在通過在這裏的其他用戶從頭上週開始的方式,但我已經開始通過一些教程,我還挺需要讓我的項目的最後一部分釘會...

+1

如果可能,你可以結合成一個查詢,使用'GROUP BY'?我發現任何時候我想在另一個環境中做一個循環,我的邏輯中存在一個缺陷。 – Sablefoste

+0

我想,我明白你要去哪裏。如果這是我,我可能會抓取用戶以前選擇的所有複選框ID,然後將它們轉儲到單維數組中。在你的html文件中,當你循環複選框來創建它們時,我會爲該複選框的唯一ID運行一個簡單的'in_array'函數,並確定它是否應該被檢查 – mituw16

回答

1

我會建議改變你的查詢策略 - 只使用一個而不是兩個。您可以檢查選擇列表的第二個成員的值 - listscar來自下面查詢結果的空值。如果它是空的,則複選框不被選中,否則它是(它存在於第二個表中)。

$result = mysql_query("SELECT `carlist`.`car`, `lists`.`car` FROM `carlist` left join `lists` on (`carlist`.`car` = `lists`.`car` and `lists`.`username` = 'Palendrone') ORDER BY `carlist`.variety ASC"); 
+0

偉大的建議感謝你Petr,我用這個想法正如你所說的改變了if語句爲「if(」$ row [1]「== NULL)」,並添加了條件來檢查那裏,這不僅是一個很好的建議,它節省了敲入SQL服務器的循環一個循環。通常分享的問題是一個問題,更多的人得到了,在這種情況下,你釘了它:0)乾杯 – Palendrone

+0

很高興我可以幫助:-) –