按名称分组按名称返回所有字母

时间:2011-07-04 20:02:12

标签: php mysql

由于某种原因,此查询无效。

<p align="center">
<?php
$result1 = mysql_query("SELECT name FROM comics GROUP BY name ORDER BY name ASC");
while ($row = mysql_fetch_array($result1))
{
?>
<a href="?sort=<?php echo substr($row['name'], 0, 1); ?>"><?php echo substr($row['name'], 0, 1); ?></a>&nbsp;    
<?php } ?>    
</p> 

输出

2  2  3  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  A  V  V  V  V  Z  

而不是通过名称进行分组,然后通过第一个字母将其分解,只显示一个字母,然后显示所有字母。

任何帮助?

4 个答案:

答案 0 :(得分:2)

您在SQL中使用全名来分组;比你在PHP中迭代结果并只显示第一个字母;当然,如果你的表包含例如。

ABC 阿德 AFG

GROUP BY名称将全部返回;并且只显示第一个字母将打印“A”三次。

如果您只想检索可以尝试的第一个字母

SELECT
 LEFT( name, 1 ) AS fl 
FROM 
 ...
GROUP BY
 fl

答案 1 :(得分:2)

你的查询工作正常。您询问了所有漫画的所有名称,并按名称升序对其进行了分组。问题是你只想将漫画名称的第一个字母分组。

SELECT LEFT(`name`,1) AS 'part'
FROM `comics`
GROUP BY LEFT(`name`,1)
ORDER BY LEFT(`name`,1) ASC;

在php中,echo $row['part'];

就足够了

答案 2 :(得分:0)

SELECT SUBSTRING(name,1)as name FROM comics GROUP BY 1 ORDER BY 1 ASC

答案 3 :(得分:0)

您在数据库中有多少个不同的名称。您正在对返回的结果执行子字符串,以便在返回一组名称时使用,例如:

adam
andy
abraham
alfie

你最终会得到

a
a
a
a

使用

SELECT distinct(name) FROM comics ORDER BY name ASC

将以升序数字顺序返回唯一名称。