快速提问,我认为对于那些拥有超过PHP / MySQL最基本知识的人来说,这是一个非常简单的解决方案。
我有一个存储在数据库中的各种状态的城市列表,其中包含城市,州和其他一些变量。现在,他们被拉成一个按城市名称排序的列表:
我希望能够先按州分组,然后列出所有具有该州值的城市。所以它看起来像:
AK
CA
我知道我需要做一些foreach并在线搜索,但还没有找到一个我可以开始工作的例子。
以下是我必须提取的基本清单:
$list = mysql_query("SELECT id, alphaname, state FROM regional ORDER BY alphaname",$db);
while ($thearray = mysql_fetch_array($list)) {
echo "<li><a href='info.html?id=$thearray[id]'>$thearray[alphaname], $thearray[state]</a></li>";
}
我知道如何做的唯一真正的方法是为每个状态运行一个查询,这将是一个痛苦而且完全是愚蠢的......
感谢您的帮助!
更新 - 已解决。虽然i-g工作得很好,但我还是选择了rockacola的方法。
答案 0 :(得分:4)
试试这个..
查询所有具有州的城市,先按州按顺序查询,然后按城市查询:
SELECT id, alphaname, state
FROM regional
ORDER BY state ASC, alphaname ASC
将数据集整理为二维数组:
$states = array();
while($thearray = mysql_fetch_array($list))
{
$states[$thearray[state]][$thearray[id]] = $thearray[alphaname];
}
现在$states
的内容应该类似于:
Array
(
[AK] => Array (
[id_1] = Anchorage
[id_2] = Juneau
)
[CA] => Array (
[id_3] = Los Angeles
[id_4] = San Diego
[id_5] = San Francisco
)
)
生成HTML演示文稿:
注意:添加锚点以反映建议的问题。
foreach($states as $state_name => $cities)
{
echo '<h3>'.$state_name.'</h3>';
echo '<ul>';
foreach($cities as $id => $city_name)
{
echo '<li><a href="info.html?id='.$id.'">'.$city_name.'</a></li>';
}
echo '</ul>';
}
答案 1 :(得分:1)
更新您要使用的SQL查询:
ORDER BY state, alphaname
这将使您的数据库返回结果为:
state city
------------------
AK Anchorage
AK Juneau
...假设在示例中使用SELECT state, alphaname AS city
。
演示必须用PHP处理:
//Please excuse my hideous attempt at PHP. Better to think of it as Psuedo code
while ($thearray = mysql_fetch_array($list)) {
echo $thearray[state]
echo "<li><a href='info.html?id=$thearray[id]'>$thearray[alphaname]</a></li>";
}
...或者您可以查看i-g
的帖子。
答案 2 :(得分:0)
按州排序所有行。然后,按顺序遍历所有行。在第一行以及状态与上一行不同的任何行上,在输出城市名称之前输出状态名称。
答案 3 :(得分:-2)
SQL不会返回超过2维的数据。你想要的是获得某种枢轴列。您的问题的答案是使用以下内容获取所有行:
SELECT * FROM regional ORDER BY state;
然后使用PHP(或您选择的语言)进行排序和分组,但不使用SQL。