Php / Mysql查询按字母组列出

时间:2013-10-19 14:17:19

标签: php mysql

如何在php上进行查询和编码?

我对sql的查询是名字,但是我希望它在php上列出,它按名称以A,B,C等开头,如下所示。

我的代码就像这样运行

$sqlquery = <squery string>  
$d=sql(sqlquery)  
while(fetch(d))  
{  
echo data   
}  

我希望它是如下所示的回音列表

A
阿隆
加速
阿曼

巴尔特
Balbon
Basty
C



Z

如何在每次开始时都会检查每个新字母,它会在查询运行时首先从首字母开始回信到组?我想在一个查询中执行此操作,因此我不必运行查询来匹配每个起始字母以对它们进行分组。

2 个答案:

答案 0 :(得分:2)

您可以做的是运行此查询

请注意,有些人会认为这是错误的,因为您使用SQL格式化HTML代码但是您获得了非常干净的客户端代码

select 
   UPPER(LEFT(name.name, 1)) "capital"
 , GROUP_CONCAT( name.name SEPARATOR '<br />') "name_formatted"
from
 name

group by 
 capital asc

查看此演示http://sqlfiddle.com/#!2/6ec58/8 一个坏处是“使用filesort”,因此最好在数据库中有一个单独的起始资本列

如果您运行该查询并获取它,您将得到一个这样的数组..

$names = array(
    'A' => 'Aron<br />Accel<br />Aman'
  , 'B' => 'Balter<br />Balbon<br />Basty'
);

什么很容易循环(注意示例循环)

foreach ($names as $capital => $name_formatted) {
  echo '<b>' . $capital . '</b>' . '<br />';
  echo $name_formatted . '<br />';
}

输出什么

A
Aron
Accel
Aman
B
Balter
Balbon
Basty

答案 1 :(得分:1)

没有什么太复杂了,只需使用类似的东西:

$sqlquery = <squery string>  
$d=sql(sqlquery) 
$firstletter = ''; 
while(fetch(d))  
{
 if (substr(d, 0, 1) !== $firstletter) {
  if (!empty($firstletter)) {echo '</div><hr />';}
  $firstletter = substr(d, 0, 1);
  echo '<div>'.$firstletter;
 }
 echo d;
}