SELECT
					fs.id AS special_id,
					fs.type AS special_type,
					fs.special_header,
					fs.special_brief,
					ROUND( fs.start_price,2 ) AS start_price,
					c.id AS cruise_id,
					c.length AS cruise_length,
					c.length AS nights,
					c.photo AS cruise_photo,
					fs.cruise_id,
					s.id AS ship_id,
					s.name AS ship_name,
					s.thumbnail AS ship_thumbnail,
					cu.name AS currency,
					cu.sign AS currencysign,
					fs.special_text,
					MIN(sd.sailingdate) as sailingdate,
					fs.cruiseline_id,
					cl.name AS cruiseline_name,
					p.name AS embark_port, -- not sure why both are here... will delete one someday!
					p.name AS port_name,
					p2.name AS disembark_port,
					d.id AS destination_id,
					d.name AS destination_name,
					d.image AS destination_image,
					fs.uploaded_pdf,
					fs.special_order,
					fs.advert_code
				FROM
					( factoryspecials fs,
					cruises c,
					cruiselines cl,
					ships s,
					currencies cu,
					sailingdates sd,
					factorysailingdates fsd,
					destinations d,
					ports p,
					ports p2,
					factorypreferedcruiselines fpcl )
					LEFT JOIN destinationsweight dw ON dw.destination_id=d.id AND dw.factory_id=fpcl.factory_id
				WHERE
					fs.main_special="y"
					AND fs.withdrawn="n"
					AND fs.checked="y"
					AND fs.factory_id=533
					AND fs.cruise_id=c.id
					AND c.ship_id=s.id
					
					AND cl.id=c.cruiseline_id
					AND cu.id=fs.currency_id
					AND sd.id=fsd.sailingdate_id
					AND fsd.special_id=fs.id
					AND fs.validity_date_start <= CURDATE()
					AND fs.validity_date_end >= CURDATE()
					AND fs.cruiseline_id=cl.id
					AND	sd.sailingdate > CURDATE()
					AND p.id=c.embarkport_id
					AND p2.id=c.disembarkport_id
					AND d.id=c.destination_id
					AND fpcl.factory_id="533"
					AND fpcl.cruiseline_id=fs.cruiseline_id
					AND (
						dw.weight IS NULL
						OR dw.weight != 0
					)
				GROUP BY fs.id
				ORDER BY fs.special_order
			

Got error 28 from storage engine