Jump to content

Recommended Posts

I'm page that has a mysql database. the database contains company names with some extra information. I need to build a page that has an alphabet at the top of the page, and if you click on one of the letters then you get the company names that start with that letter. Right now i have that, and it's working. But i've run into a problem. I want it so that when the alphabet at the top is generated, i only want letters that actually have stuff in the database to have links (so that a user knows where data is).

Example, if the database contained "Adidas" "Nike" and "K-Swiss" then only A, N, and K would have links on them, the rest would still be there, but not have a link.

 

here's the code that i have so far

 

// query
mysql_select_db($mysqldatabase, $mysqlconnection);
$testquery = "    SELECT        col_clientName
        FROM        tbl_TEST
        ORDER BY        clientName asc
";
$dotestquery = mysql_query($testquery, $mysqlconnection) or die(mysql_error());
$page = "";
if(isset($_GET['page'])) {
   $page = $_GET['page'];
}
// output alphabet
for ($i=65; $i<=90; $i++){
   $letter = chr($i);
   echo " <a href='letterTEST.php?page=$letter'>";
   echo $letter;
   echo "</a>";
}
echo "<br /><br />";    

// array output    
while (list($col_clientName) = mysql_fetch_row($dotestquery)) {
   $wordLetter = substr($col_clientName,0,1);
   if ( $wordLetter==$page ){
     echo "$clientName";
     echo "<br />";
   }
}

 

Has anyone done anything like this? Thank you in advance

 

- JayNo

Link to comment
https://forums.phpfreaks.com/topic/3167-pagination-but-with-letters/
Share on other sites

You could build a function that would check if database has match for that letter, like this:

function inDb($letter) {
//search database on first letter, LIMIT is because one is enough
    $query = "SELECT col_clientName FROM tbl_TEST WHERE clientName LIKE '$letter%' LIMIT 1";
    $result = mysql_query($query) or die (mysql_error());
    if (mysql_num_rows($result) > 0) {
        return true;    
    } else {
        return false;    
    }
}

 

and where you display the links:

 

...
if(inDb($letter)) {
    echo " <a href='letterTEST.php?page=$letter'>";
    echo $letter;
    echo "</a>";
} else {
    echo $letter;
}
...

 

Haven't tested the code, but maybe you get the basic idea.

That's not ideal either -- it would require 26 calls to the database! The better way would simply be to return all of the leading letters in a single string, from one DB call:

 

SELECT UPPER( GROUP_CONCAT( DISTINCT LEFT(clientName,1) SEPARATOR '' ) ) AS clientAlphabet FROM tbl_TEST

 

And then simply check whether the letter appears in the stored alphabet string -- retrieved via a list()...mysql_fetch_row() call into a varible I'll call $clientAlphabet -- as you loop through the alphabet:

 

// output alphabet
for ($i=65; $i<=90; $i++){
   $letter = chr($i);
   echo ( strpos($clientAlphabet, $letter) === false ) ? $letter : " <a href='letterTEST.php?page=$letter'>$letter</a>";
}

 

Hope that makes sense.

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.