If I understand that correctly, you only need to add the extra condition to the WHERE clause of the main query. So: SELECT id, name, cat FROM table WHERE cat = (SELECT cat FROM table WHERE id = $ID) AND id <= $ID; This should display all rows, before and including the row with the same 'cat' as 'id' has. For your example of $ID = 51 it should display: +---------+------+ | id | cat | +---------+------+ | 40 | FLK | | 41 | FLK | | 42 | FLK | | 44 | FLK | | 45 | FLK | | 46 | FLK | | 47 | FLK | | 48 | FLK | | 49 | FLK | | 50 | FLK | | 51 | FLK | +---------+------+ O.K. this is the problem! it should display all rows, before and including AND AFTER the row ,starting from the specified row with the same 'cat' as 'id' has. --------------------------------- Shape Yahoo! in your own image. Join our Network Research Panel today!