簡體   English   中英

如何在PHP MySQL中按字母順序顯示表數據?

[英]How to Show a Table data with Alphabetical Table in Php mySql?

我有一個包含950行數據的字典數據庫。 我想按字母順序在表中按字母順序顯示單詞列表。

對於示例表,a顯示了從A開始的數據的前(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)
-------------------------

您應該提取左邊的第一個字母

select left(word, 1) from table;

功能並使用巨大的聯合所有查詢。 詳細信息在此處通過示例進行描述。

我在下面的查詢中嘗試過,目前限制為3。

簡而言之,我們要做的是- 按排序的單詞分組並限制為n

  1. 將表創建為word_table
 CREATE TABLE `offers`.`word_table` ( `Id` INT(3) NOT NULL , `Word` VARCHAR(45) NOT NULL ) ENGINE = InnoDB; 
  1. 將您的記錄插入表中
 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

在此處輸入圖片說明

希望這對您有幫助!!!

您可以使用單個查詢來獲取不同的第一個字符和以該字母為起始字母的所有記錄的結果

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM