RE: searching through a mysql db/tbl

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

 



> hi...
> 
> i'm trying to figure out how to approach/solve a few issues. looking
> through
> google hasn't made the light shine!!
> 
> 1) i'm trying to figure out how to allow a user to search through a
> query/tbl for a given string. ie, if i have the following as the result of
> a
> query:
> 
>   name       email       foo...
>   aa         a@xxxxx     dddd
>   b1         aa@xxxxx    123
>   bb         q@xxxxxx    qwe
> 
> 
> if i allow a user to search on say 'aa', i'd like the user to be able to
> get:
> 
>   name       email       foo...
>   aa         a@xxxxx     dddd
>   b1         aa@xxxxx    123
> 
> any ideas as to how i could go about and create the query, or what would i
> need to do to have this result...

Hi,

Basically what you need to do is dynamically create the WHERE clause of your
query string.

In the example above, the WHERE clause might look something like:

$qry = "SELECT * FROM table WHERE name LIKE '%$searchterm%' OR email LIKE
'%$searchterm%'";

If you want to span the search across more fields, simply add them as extra
OR elements to the WHERE clause. 


> 
> 2) if i have a query that produces a number of rows, how/what would i need
> to do, to limit the number of rows displayed, and to allow the user to
> select a 'back/next' button that would generate/display the next 'N' items
> in the list/query results...
> 
> if anybody could direct me to sample docs/code that kind of
> describes/solves
> what i've described, i'd appreciate it!!!

Here I'm making the assumption that you're using MySQL. If that's the case,
you need to familiarize yourself with the LIMIT clause. This allows you to
specify a starting point and number of rows to return for the resultset.

So, using the query above again:

$qry = "SELECT * FROM table WHERE name LIKE '%$searchterm%' OR email LIKE
'%$searchterm%' LIMIT 0,10";

...will return the first 10 results from your query (records 0 to 9). Note
that the 'first' row is at position 0 in the recordset. Also note: if there
are less than 10 records returned by your query (ie in your example, only 2
match your pseudo request), only those records will be returned.

Then, issuing:

$qry = "SELECT * FROM table WHERE name LIKE '%$searchterm%' OR email LIKE
'%$searchterm%' LIMIT 9,10";

...will return the next 10 results from your query (records 10 to 19), and
so on.

This requires you to pass some variables from one search result page to the
next, particularly the variable that indicates where the 'next' results
should begin, allowing you to factor that in when building the LIMIT clause
of the query string for the search results that should be displayed on that
page.

A Google search on "PHP pagination" or "PHP paginate" should return a number
of online resources explaining how to paginate results returned from a db
query in PHP.

Hope this helps.

Much warmth,

Murray
---
"Lost in thought..."
http://www.planetthoughtful.org

-- 
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