2013-07-16 5 views
9

J'ai une table de membre où je stocke tous les détails au sujet d'un membre comprenant son nom, email, téléphone etc. Je veux que le nom apparaîtra comme un groupe alphabétique sage. Tel que montré dans l'exemple.Liste alphabétique groupe par alphabet en php

A 
    Alan 
    Alex 
    Amar 
    Andy 

B 
    Bob 
    Brad 

C 
    Calvin 
    Clerk 
D 

E 

je peux trier le champ par ordre alphabétique sur commande par l'ASC, mais comment puis-je les obtenir dans le groupe de l'alphabet.

Toutes les suggestions sont les bienvenues. J'utilise php.

+2

Quels groupes? Voulez-vous les regrouper dans votre base de données, dans un tableau, dans la sortie? Avez-vous déjà du code? – GolezTrol

+1

Les problèmes d'affichage des données sont souvent mieux traités au niveau de l'application - par ex. avec une simple boucle agissant sur une liste ordonnée. – Strawberry

+0

Est-ce le niveau d'application ou le niveau de présentation? @Strawberry –

Répondre

-1

vous pouvez le faire avec votre requête de sélection comme dans cet exemple:

$query = "SELECT * FROM `user` ORDER BY `name` ASC ;"; 
+0

Je l'ai déjà fait –

+0

OP voulez le groupe du résultat alphabétique et 'ORDER ASC' renvoie toutes les données collectées et non le groupé. –

+0

pouvez-vous var_dump votre résultat et le poster ici et je peux vous donner un script. –

4

Peut-être est une mauvaise façon de le faire, mais il peut vous aider maintenant.

<?php 

    $aGroup = array(
     "A" => array(), 
     "B" => array(), 
     "C" => array(), 
     "D" => array(), 
     "E" => array(), 
     // until "Z" 
     ); 

    $result = mysql_query("SQL as you want"); 

    while ($row = mysql_fetch_array($result)) { 
     $letter = strtoupper($row[0][0]); // I supose that the first column is the name 
     $aGroup[$letter][] = $row; 
    } 

?> 
+0

Sur $ letter = strtoupper ($ row [0] [0]); Je reçois le nom et la première lettre, puis je peux le classer par ordre alphabétique. J'espère que je t'ai aidé! – Lompa

+0

Je ne suis pas vraiment un codeur mais, personnellement, je pense que c'est un bon moyen! – Strawberry

+0

C'était pour le garder simple et facile à lire. Il y a plus de façons de faire mieux, mais je pense que c'est un moyen plus rapide de le faire. – Lompa

2

Si vous voulez faire cela, dans votre SQL;

SELECT SUBSTRING(name, 1, 1) as alpha, name from 'user' GROUP BY SUBSTRING(name, 0, 2), name order by 'alpha', 'name' 

et en php

<?php 

    $temp = array(); // would also generate a dynamic array 
    $result = mysql_query("SELECT SUBSTRING(name, 1, 1) as alpha, name from 'user' GROUP BY SUBSTRING(name, 0, 2), name order by 'alpha', 'name'" 
    while ($row = mysql_fetch_array($result)) { 
     $temp[$row['alpha']][] = $row['name']; 
    } 

    /* this would create array such as; 

    'A' 
     --> 'Adam' 
     --> 'Apple' 
    'B' 
     --> 'Ba...' 
     --> 'Be...' 
    */ 

?> 

Hope this helps.

0
try this 
/* Get the letter user clicked on and assign it a variable called $sort */ 
$sort = $_REQUEST['letter']; 
/* Let's check if variable $sort is empty. If it is we will create a query to display all customers alphabetically ordered by last name. */ 
if($sort == ""){ 
$qry= "SELECT * FROM tbl_customers ORDER BY lastname ASC "; 
}else{ 
/* if varible $sort is not empty we will create a query that sorts out the customers by their last name, and order the selected records ascendingly. */ 
$qry = "SELECT * FROM tbl_customers WHERE lastname LIKE '$sort%' ORDER BY lastname ASC"; 
} 
/* Notice the use of '%' wilde card in the above query "LIKE '$sort%'". */ 
//next step is to execute the query. 
$execute = mysql_query($qry) or die(mysql_error()); 
/* Before we display results let's create our alphabetical navigation. The easiest way to create the navigation is to use character codes and run them through the "for" loop. */ 
echo "<p>"; 
for ($i = 65; $i < 91; $i++) { 
printf('<a href="%s?letter=%s">%s</a> | ', 
$PHP_SELF, chr($i), chr($i)); 
} 
echo "</p>"; 
/* now we are ready to display the results. Since out tbl_customers table has only three fileds we will display the results in a paragraphs. In the real world you may need to display the results in a table. 
To display the results we will use "do while" loop to fetch the results. If no customers are found we will display an error message. */ 
if(mysql_num_rows($execute)>0){ 
do{ 
echo "<p>" .$result['id']. " " .$result['firstname']. " " .$result['lastname']. "</p>"; 
}while($result = mysql_fetch_assoc($execute)); 
}else{ 
echo "<p>No customer found.</p>"; 
} 
Questions connexes