2017-01-02 59 views
0

我有一个包含950行数据的字典数据库。我想按字母顺序以字母顺序显示单词列表。如何使用Php mySql中的字母表来显示表数据?

有关示例表的第一显示(5)从所述的数据的开始的话:

A 
------------- 
Abacus 
Abelian group 
Abscissa 
Absolute Value 
Abstract Number 

B 
--------------- 
Bar Graph 
Base 
Base Depth of the Triangular Prism 
Base of the Triangular Prism 
Basic arithmetic operations 

. 
. 
. 

Z 
--------------- 
Z-Intercept 
Zero 
Zero Divisors 
Zero Element 
Zone 

每5点数据的取表应停止当前信,并跳转到下一个字母。

我不知道该怎么做。

我的表结构

------------------------- 
Name | Type 
------------------------- 
Id | int(3) 
Word | varchar(45) 
------------------------- 
+0

使用'ORDER BY'条款首字母记录的结果。像 ** SELECT * FROM'table_name' ORDER BY'Word' ** –

+0

k。但是如何在从字母A中得到5个单词后切换第一个字母(B)。我想要一个用5个单词A到Z的表格。 –

回答

0

你应该提取的第一个字母与left

select left(word, 1) from table; 

功能和巨大的使用UNION ALL查询。详情请参阅here中的示例。

0

我想下面的查询其进行了限制,现在的3

总之,我们必须做的是 - 组排序的话,并限制到n

  1. 创建表作为word_table
CREATE TABLE `offers`.`word_table` (`Id` INT(3) NOT NULL , `Word` 
VARCHAR(45) NOT NULL) ENGINE = InnoDB; 
  • 插入了记录在表中所需的输出
  • INSERT INTO `word_table` (`Id`, `Word`) VALUES ('1', 'Abacus'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('2', 'Abelian group'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('3', 'Abscissa'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('4', 'Absolute Value'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('5', 'Abstract Number'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('6', 'Bar Graph'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('7', 'Base'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('8', 'Base Depth of the Triangular Prism'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('9', 'Base of the Triangular Prism'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('10', 'Basic arithmetic operations'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('11', 'Z-Intercept'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('12', 'Zero'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('13', 'Zero Divisors'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('14', 'Zero Element'); 
    
    INSERT INTO `word_table` (`Id`, `Word`) VALUES ('15', 'Zone'); 
    

    查询写入

    SELECT x.* 
        FROM (SELECT t.*, 
           CASE 
           WHEN @category != substring(t.Word,1,1) THEN @rownum := 1 
           ELSE @rownum := @rownum + 1 
           END AS rank, 
           @category := substring(t.Word,1,1) AS var_category 
          FROM word_table t 
          JOIN (SELECT @rownum := NULL, @category := '') r 
         ORDER BY t.Word) x 
    WHERE x.rank <= 3 
    ORDER BY `x`.`var_category` ASC 
    

    OUTPUT

    enter image description here

    希望这可以帮助你!

    +0

    乐意提供帮助。如果此答案或任何其他人解决了您的问题,请将其标记为已接受。这对其他用户会有帮助 –

    0

    您可以使用单个查询来获取两个截然不同的第一个字符,所有以该字母,通过使用该

    SELECT lower(left(filed_name,1)) as letter, group_concat(filed_name) as all_records FROM `table_name` where lower(left(filed_name,1)) in(SELECT DISTINCT LEFT(filed_name, 1) FROM table_name order by filed_name) group by lower(left(filed_name,1)) ORDER BY filed_name ASC 
    
    相关问题