$_GET is an array of variables passed into your script via HTTP GET. In more simple terms, these are the bits after your script name (all teh stuff after the question mark).
So, in the link www.somesite.com/somescript.php?size=12&colour=red there are two GET variables, size and colour, which are available within PHP as $GET['colour'] and $GET['size']
If you're not passing in a variable called long in the above way, then $_GET['long'] won't be set.
Does that help explain things?
I think that your confusion is that you have a fieldname called "id" in your database table, and you also have a GET variable called "id". When you do
$id = $_GET['id'];
you're taking the GET variable (passed in as described above, yadda yadda) and assigning its value to the PHP variable $id. This has nothing at all to do with your database.
Your select statement then tries to find all the records whose id matches the one passed in as the GET variable.
Do you want to further restrict the records selected so that they only include the ones with value of 'y' in the field called 'long'? if so you could add and long = 'y' after your WHERE id=$id. But again, I'm still only guessing at what you actually want to achieve.
And just to reiterate, laserlight wasn't being unhelpful, she was just trying to get you to restate your question in a way that made the problem clearly. laserlight spends a lot of time answering questions here. and she's really cool. and I want her to be my girlfriend. or something.