我在mysql中有以下表: -
id | bandname 1 | a perfect circle 2 | aerosmith 3 | b.b king 4 | cat stevens
我在一个查询中获取所有结果: -
$result = mysql_query("SELECT id, bandname FROM bands ORDER BY bandname ASC");
在我的页面上,我有一个A-Z锚点链接,它会显示一个新标签: -
<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循环运行。< / p>
如果我要处理5,000个乐队,那么最好的方法是什么?一个sql结果循环多次,每个band的一个结果然后保存在一个字母数组中,或者每当用户点击其中一个锚链接时ajax sql查询?
这甚至没有开始处理0-9选项卡,我认为这将是我目前的代码本身的一个问题。任何指针真的很感激。
我已经找到了答案,但没有找到与我的问题类似的东西:)
答案 0 :(得分:0)
虽然我不推荐您使用的方法,但如果您想保持它的简单,那么您需要在输入之前使用while提取所有的波段名称通过将foreach放入临时数组中来循环foreach,或者在任何输出发生之前更好。这将允许您在此数组上使用foreach()
而不是while。您也可以按字母对这些数组进行排序,这样可以更简单地查看哪些字母带有以它开头的带