Я создаю простой альбом и отслеживаю веб-приложение, но я вхожу в серьезную ситуацию с извлечением правильной информации и повышением ее эффективности.У меня есть два стола - в альбоме около 500 наименований и около 5000 треков.
Итак, я начну с обычного цикла while:
$albumQuery = "SELECT * FROM `album` ORDER BY album ASC";
$albumDatabase = mysql_query($albumQuery, $admin) or die(mysql_error());
while($albumRow = mysql_fetch_array($albumDatabase)){
$list = "";
$list.="build some html for showing later";
- вот где я попадаюпроблема эффективности:
$trackQuery = "SELECT track, album FROM `track` WHERE album = '{$album}' ORDER BY filename ASC";
$trackDatabase = mysql_query($trackQuery, $admin) or die(mysql_error());
while($trackRow = mysql_fetch_array($trackDatabase)){
$list.="track html info";
}
$listarray[] = $list;
}
natcasesort($listarray);
Затем я запускаю foreach позже в теле
foreach ($listarray as $v){
$first_letter = strtoupper(mb_substr($v,9,1));
if($tmp!==$first_letter){
$tmp = $first_letter;
echo '<div class="alphaHolder">'.$tmp.'</div>';
}
echo $v;
}
Это работает отлично, за исключением, вероятно, массовой неэффективности.
Iможно заставить его регургитировать всю информацию в правильном порядке и порядке.
В качестве эксперимента я поместил второй цикл while вне родительского цикла и вставил эту информацию в свой собственный массив.Затем запустил это:
foreach($trackArray as $k => $v){
if(in_array($v['album'], $albumRow)){
$list.="track html info";
}
}
Но потом я понял, что каждый раз, когда он проходит через родительский цикл, он перезапускает foreach для 5000 элементов, а затем выполняет in_array 500 раз.Это, очевидно, занимает много времени и обычно вылетает из браузера.Приводит меня к тому, что исходный вложенный цикл while немного более эффективен и запутан.
Я начал думать, что array_intersect может быть решением, но я не хочу расшатывать неправильное дерево.
Вероятно, слишком много циклов и что вы делаете, но мне нужна естественная сортировка и регургитация буквенно-цифрового заголовка.
Screenie: http://ink361.com/#/photos/133115598501394804_9688917