Re: Alphabetical pagination

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Andrew Ballard wrote:
On Tue, Jul 14, 2009 at 3:38 PM, Miller,
Terion<tmiller@xxxxxxxxxxxxxxxxxxxx> wrote:
I am trying to make a page that displays a-z like a b c d e etc as links
then when you click open one it reloads itself and shows only the query
results that go with that letter...i'm not getting it....I get a page that
says ARRAY over and over...

What I have so far:
                            <?php

if(!isset($_SESSION['RestaurantList']))

{
                                     // List not grabbed yet, so run
query and store in $_SESSION

                                                       $sql = "SELECT
DISTINCT name FROM restaurants  GROUP BY name DESC";

$result = mysql_query($sql) or die(mysql_error()) ;

$count = mysql_num_rows($result);

echo $count;


while($row = mysql_fetch_array($result)) {



$name=array($row['name'],0,1);




Why are you setting the value of $name to an array? If you try to echo
$name after this statement (as you are below), PHP will echo the word
"Array".



//$name = array('name');

                                                       echo "<a
href=\"page.php?name=" .$name. "\"> $name</a>\n";

}


                                                                   }



$alphabet = range('A', 'Z');

foreach ($alphabet as $letter) {

echo '<a href="' . $_SERVER['PHP_SELF']

. '?letter=' . $letter . '">' . $letter . '</a>';

}






?>

If the list of restaurants is very long, I wouldn't store it in a
session variable. It is the same for every person who visits your
site, so there is little use storing separate redundant copies in
session scope where it will needlessly fill up disk space and/or
memory.

As far as the query is concerned, you could do this:

<?php

$index_letter = $_GET['letter'];

if (preg_match('/^[A-Za-z]$/', $index_letter)) {

    $sql = "SELECT DISTINCT name FROM restaurants WHERE name LIKE
'$index_letter%' GROUP BY name DESC";

//....
?>

I would also consider whether you really need the keyword DISTINCT in
the query. In a properly normalized table, name should probably
already be distinct (and constrained by a UNIQUE index on that
column).

Andrew


Also, since this is MySQL, you need to make sure you make it non case-sensitive by using ILIKE instead of LIKE in that SELECT statement.

$sql = "SELECT DISTINCT name FROM restaurants WHERE name iLIKE '$index_letter%' GROUP BY name DESC";

--
Jim Lucas

--
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php


[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux