我的代码有问题。循环次数过多。例如,phpmyadmin 中的查询返回 4 个结果,而我的代码返回 5 个。 另一个例子。 $arr[0] 的打印应该返回
Wybory
Wybory
Burmistrz
Rada
但它返回
Wybory
Wybory
Wybory
Burmistrz
Rada
Rada Rada
怎么了? 它添加了太多元素 一开始我在“komitet”中有 14 个元素,但它创建了 15 个元素数组。
$WYNIK = '
<h2 class="site-title">Kandydaci</h2>
<div id="kandydaci_lista" class="row">
<ul class="rejon">';
$zapytanie='SELECT * FROM komitety';
$wynik=mysql_query($zapytanie) or die('błąd bazy');
$komitety=array();
while($komitety[]=mysql_fetch_assoc($wynik));
foreach($komitety as $komitet){
$WYNIK.='<li><span id="komitet_'.$komitet['id'].'">'.$komitet['nazwa'].'<img src="'.$ADR.'img/arrow_bot.png"></span>';
$zapytanie='
SELECT kandydat_do
FROM kandydaci
WHERE komitet="'.$komitet['id'].'"
GROUP BY kandydat_do
';
//echo"<pre>";
$wynik=mysql_query($zapytanie) or die('błąd bazy');
$kandydaci_do=array();
array_pop($kandydaci_do);
print_r($kandydaci_do);
while($kandydaci_do[]=mysql_fetch_assoc($wynik));
//print_r($kandydaci_do);
$WYNIK.='<ul class="kandydat_do">';
foreach($kandydaci_do as $kandydat_do){
$WYNIK.='<li><span>'.$kandydat_do['kandydat_do'].'</span>';
$zapytanie2='
SELECT k.okreg, ok.granice_okregu from kandydaci k
LEFT JOIN okregi as ok ON k.komitet=ok.teryt
where k.komitet= "'.$komitet['id'].'" and k.okreg=ok.nr_okregu
group by k.okreg
';
$wynik2=mysql_query($zapytanie2);
$okregi=array();
while($okregi[]=mysql_fetch_assoc($wynik2));
foreach($okregi as $okreg){
if($okreg['okreg']==0)
{
$zapytanie='
SELECT k.*, ko.nazwa as komitet
FROM kandydaci as k
LEFT JOIN komitety as ko ON ko.id=k.komitet
WHERE k.komitet="'.$komitet['id'].'" AND k.kandydat_do="'.$kandydat_do['kandydat_do'].'" AND k.status=1
group by k.id
';
}
else{
$zapytanie='
SELECT k.*, ko.nazwa as komitet
FROM kandydaci as k
LEFT JOIN komitety as ko ON ko.id=k.komitet
WHERE k.komitet="'.$komitet['id'].'" AND k.kandydat_do="'.$kandydat_do['kandydat_do'].'" AND k.status=1 AND k.okreg='.$okreg['okreg'].'
group by k.id
';
}
//echo $zapytanie.'<br />';
$wynik=mysql_query($zapytanie);
$kandydaci=array();
while($kandydaci[]=mysql_fetch_assoc($wynik));
$arr = explode(' ',trim($kandydat_do['kandydat_do']));
//echo $arr[0];
if($okreg['okreg']==0 || $arr[0]=='Burmistrz' || $arr[0]=='Wójt'){
}
else{
$WYNIK.='
<ul class="okreg"><span>Nr okręgu: '.$okreg['okreg'].'</span>
<br>
<span class="granice">'.$okreg['granice_okregu'].'</span>';
}
foreach($kandydaci as $kandydat){
if($kandydat['imie']==''){
}
else{
$WYNIK.='
<li class="kandydat '.($kandydat['platny']?'platny':'').'">
<a href="kandydaci,'. $kandydat['id'] .'.html">
<span>'.$kandydat['imie'].' '.$kandydat['nazwisko'].'</span>
</a>
</li>';
}
}
if($okreg['okreg']==0 || $arr[0]=='Burmistrz' || $arr[0]=='Wójt'){
}
else{
$WYNIK.='</ul>';
}
}
$WYNIK.='</li>';
}
$WYNIK.='</ul>';
$WYNIK.='</li>';
}
$WYNIK.='</ul>';
$WYNIK.='</div>';
$SRODEK.=$WYNIK;
最佳答案
您需要将构建数组的代码更改为如下所示(对于执行此任务的所有地方都相同):
$komitety=array();
while ($row = mysql_fetch_assoc($wynik)) {
$komitety[] = $row;
}
原因是上次 mysql_fetch_assoc()
运行时返回 false(因为没有更多的行)并且它添加了 false
结果作为数组中的项目。
这是因为它添加到数组之前它会检查 while 循环中的条件,而您想要的恰恰相反 - 您希望它在添加到数组之前检查条件。
关于php + mysql 大查询,循环问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52513994/