आपके जहां क्लॉज में कुछ अजीब है।
यदि आप परीक्षण करते हैं:(ए और बी) या (ए या बी)
A => a.establishment_name LIKE '".$search_value."'
B => a.location_id = '".$location_search_value."'
यदि A सत्य है, तो इसकी कोई आवश्यकता नहीं है कि b सत्य है। और यह समझाता है कि आपका तीसरा उदाहरण काम नहीं कर रहा है। मुझे लगता है कि आपको अपने मूल्य का परीक्षण करना चाहिए और अपने स्पष्टीकरण के आधार पर सही WHERE क्लॉज बनाना चाहिए।
if($search_value != "" && $location_search_value == "") {
$where = "a.establishment_name LIKE '".$search_value."'";
} else if ($search_value == "" && $location_search_value != "") {
$where = "a.location_id = '".$location_search_value."'";
} else {
$where = "(a.establishment_name LIKE '".$search_value."' AND a.location_id = '".$location_search_value."')";
}
$query = "SELECT a.*, b.location_name ".
"FROM establishment a ".
"JOIN location b ON a.location_id = b.location_id ".
"WHERE ".$where;