私はmysqlに次のテーブルを持っています:-
ID | バンド名 1 | 完全な円 2 | エアロスミス 3 | bbキング 4 | 猫のスティーブンス
私は単一のクエリですべての結果を取得しています:-
$result = mysql_query("SELECT id, bandname FROM bands ORDER BY bandname ASC");
私のページには、新しいタブを表示するAZアンカーリンクがあります:-
<ul class="tabs-nav">
<li class="active"><a href="#0">0-9</a></li>
<?php
// Print a-z link
for ($i=97; $i<=122; $i++) {
$curletter = chr($i);
echo '<li><a href="#'.$curletter.'" title="Band names beginning with letter '.$curletter.'" class="uppercase">'.$curletter.'</a></li>';
}
?>
</ul>
タブの下にリストされているバンドを取得するのに問題があります。現在、私のコードは次のとおりです:-
<div class="tabs-container">
<?php
// Print a-z tabs
for ($i=97; $i<=122; $i++) {
$curletter = chr($i);
?>
<div class="tab-content" id="<?php echo $curletter; ?>">
<?php
while($bands = mysql_fetch_array( $result )) {
$bandname = $bands['bandname'];
$bandid = $bands['id'];
$bandletter = strtolower(substr($bandname , 0 , 1));
}
if($curletter==$bandletter) {
echo '<a href="'.$bandid.'/" title="'.$bandname.'>'.$bandname.'</a>';
}
?>
</div>
<?php } ?>
</div>
for ループ内で while ループを呼び出しているため、これが正しくないことはわかっていますが、AZ タブ作成プロセスのすべての反復は while ループを実行する必要があるため、私には正しくないように思えます。
たとえば 5,000 のバンドを扱う場合、これに最適なアプローチは何ですか? 1 つの SQL 結果が複数回ループされ、各バンドの 1 つの結果がアルファベット配列に保持されるか、ユーザーがアンカー リンクの 1 つをクリックするたびに ajax SQL クエリが実行されますか?
これは、現在のコードを考えると、それ自体が問題になると思う 0-9 タブの処理を開始するものではありません。どんな指針も本当に高く評価されます。
私は答えを探しましたが、私の質問に似たものは見つかりませんでした:)