[eluser]Dam1an[/eluser]
I had to do this not so long ago for a hotel search site not so long ago, and what I ended up with is:
1. Have an array in the session for the filters you want to apply, such as city_id, type_id, max_price etc
2. When you want to get all the items that match the filters (hotels in my case) get all the hotel IDs into an array
3. Use this array as part of a WHERE IN clause for the first filter (city_id)
4. Repeat for all your other filters, refining this array of hotel IDs that match all the criteria
5. Get the relevant data for the remaining IDs and display it
Starting off with a base of 75000+ hotels and filters spanning several tables, it performs really well too