2011-07-04 120 views
0

由于某种原因,此查询不起作用。组名按名称排序按名称返回所有字母

<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 

,而不是它经历和分组的名称,然后将它分解的第一个字母,只是显示它显示他们都一个字母。

有帮助吗?

+0

我不明白,它应该显示的不仅仅是第一个字母吗?因为这正是你要用'substr($ row ['nam'],0,1);'做的。 – hughes

+0

或者你想获得漫画列表中不同的第一个字母?例如,对于数据“Alpha,Apples,Beta,Babies,Delta”,您希望它打印“A B D” – hughes

+0

如果您在SQL控制台中运行此查询,它将返回多少行? – Karolis

回答

2

您GROUP BY在SQL全名;比在PHP中迭代结果并仅显示第一个字母;当然如果你的桌子包含例如

美国广播公司 阿德 AFG

GROUP BY名称将返回他们所有;只显示第一个字母将打印“A”三次。

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

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

谢谢!像魅力一样工作! – rackemup420

0

SELECT SUBSTRING(姓名,1)name FROM漫画GROUP BY 1 ORDER BY 1 ASC

+0

警告:mysql_fetch_array():提供的参数不是第16行的/home/rackemup/public_html/inc/sort.php中的有效MySQL结果资源 – rackemup420

2

您所查询的工作就好了。您要求提供所有漫画的所有名称并按名称升序分组。问题是你只想分组你的漫画名字的第一个字母。

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

在PHP现在足以echo $row['part'];

+0

我definitley写慢...:) – Marco

+0

哈哈它的一切都很好,谢谢大家的帮助:D – rackemup420

0

多少不同的名称,你必须在数据库中。你正在做的返回,这样,如果你返回一组名称,如结果的字符串:

adam 
andy 
abraham 
alfie 

你会用

a 
a 
a 
a 

使用

SELECT distinct(name) FROM comics ORDER BY name ASC 

将结束按升序编号返回唯一名称罚款。