Well, first off, I'm sure your SQL statement could probably be much shorter, but then again, I can't pretend I know what you are after. The reason I mention this is because one of the methods I would suggest is to simply attach the sql query to the links. However, as I write this I am thinking that you need to send the multiselect values to repopulate the multiselect on a subsequent page load. Then again why not build the query again since you are passing the array each time via POST? Ok, now I'm babbling...
To answer your questions only...you can pass the array in a link (or via GET). simply use implode (or use the $combined value you already have) to make a long string and base64 encode it. On the next page load, decode it and and create a new array with it or simply insert the $combined value into your query this time.
If the GET value is too large (hence the length concern above) your web server may reject some of the data on the return trip (or possibly throw an error.)
and yes, as weedpacket points out, you can use a seesion variable and keep that lengthy string serverside, in fact, you can even store arrays as session values.