Jump to content

Recommended Posts

I'm not even sure if this is possible but here goes.

I have a website that uses PHP to produce a list of names from a MySQL database. However, a basic design decision I made a long time ago seems to have some back to haunt me. The names in the database are in the format 'J Bloggs' and when these are sorted into alphabetical order they are sorted by first initial. Is there a simple way to sort these names by last name? I've tried a couple of things, but neither of those worked quite right. I've tried splitting the names into an associative array, eg J => Bloggs, but this didn't work because some of the last names are the same.

Am I going to have to redesign my database? Or is it possible to sort and array by the third character of each value?
Link to comment
https://forums.phpfreaks.com/topic/10477-sorting-values-in-an-array/
Share on other sites

Hmmm... If you can split them into array, then you can use one of the array sorting function. I am a bit lazy to find what you need, but one of them should work:

uksort(), usort(), uasort(), sort(), asort(), arsort(), ksort(), natsort(), and rsort().

EDIT:

In your case, asort() should do it:
[a href=\"http://www.php.net/asort\" target=\"_blank\"]http://www.php.net/asort[/a]
As long as they all have that same format of a single initial and lastname

[code]SELECT SUBSTRING(name, 3) as lastname,
            SUBSTRING(name,1,1) as initial  
FROM mytablename
ORDER BY surname, initial[/code]
Wow Barand! Thanks, that worked beautifully. But now I've discovered I've got another problem. I have another SQL query on that page that selects 2 names and generates a list. Up until a few weeks ago this list was horribly out of order because when I wrote the php initially I had neither the skill nor the time to fix that. Now I do and have the list sorted by first initial.

[code]$today = date("Y-m-d");
$result = mysql_query("SELECT DISTINCT name1,name2 FROM names WHERE date>='$today' AND tjs='Y'",$db);

$tjs =  array();
while ($myrow = mysql_fetch_array($result)) {
$tj1 = $myrow['name1'];
$tj2 = $myrow['name2'];
array_push($tjs,$name1);
array_push($tjs,$name2);
}
sort($tjs);
foreach ($tjs as $value){
printf("<option value=\"$value\">$value</option>\n");
}[/code]

But I can't for the life of my figure out how to sort this list by surname, which is the 3rd character of the name. Any suggestions?
This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.