diff --git a/src/App/Search.php b/src/App/Search.php index f86230f..17776db 100644 --- a/src/App/Search.php +++ b/src/App/Search.php @@ -21,18 +21,18 @@ final class Search } $conditions = []; - $bind = []; + $bindTokens = []; $i = 0; foreach ($tokens as $tok) { $tok = trim($tok); if ($tok === '') continue; $conditions[] = "(title LIKE CONCAT('%', ?, '%') OR teaser_public LIKE CONCAT('%', ?, '%') OR description LIKE CONCAT('%', ?, '%') OR city LIKE CONCAT('%', ?, '%') OR region LIKE CONCAT('%', ?, '%') OR zip LIKE CONCAT('%', ?, '%'))"; - $bind[] = $tok; - $bind[] = $tok; - $bind[] = $tok; - $bind[] = $tok; - $bind[] = $tok; - $bind[] = $tok; + $bindTokens[] = $tok; + $bindTokens[] = $tok; + $bindTokens[] = $tok; + $bindTokens[] = $tok; + $bindTokens[] = $tok; + $bindTokens[] = $tok; $i++; } @@ -45,6 +45,7 @@ final class Search } $distanceFiltering = false; + $bind = []; if ($hasGeo) { $sql = "SELECT id, title, teaser_public, description, city, region, zip, starts_at, visibility, allow_kids, location_label, lat, lng, (6371 * ACOS(LEAST(1, @@ -61,10 +62,12 @@ final class Search $whereParts[] = "(lat IS NOT NULL AND lng IS NOT NULL)"; $whereParts[] = "(lat BETWEEN ? AND ?)"; $whereParts[] = "(lng BETWEEN ? AND ?)"; - // Haversine params (order must match SQL) + // Haversine params (order must match SQL): first three $bind[] = $lat; // COS(RADIANS(?)) $bind[] = $lng; // COS(RADIANS(lng) - RADIANS(?)) $bind[] = $lat; // SIN(RADIANS(?)) + // THEN token binds + $bind = array_merge($bind, $bindTokens); // Bounding box $bind[] = $lat - $latRange; $bind[] = $lat + $latRange; @@ -73,7 +76,8 @@ final class Search // Radius for HAVING $bind[] = $radius; } else { - $sql = "SELECT id, title, teaser_public, description, city, region, zip, starts_at, visibility, allow_kids, location_label, lat, lng, 5 AS distance_km"; + $sql = "SELECT id, title, teaser_public, description, city, region, zip, starts_at, visibility, allow_kids, location_label, lat, lng, 30 AS distance_km"; + $bind = $bindTokens; } $where = $whereParts ? ('WHERE ' . implode(' AND ', $whereParts)) : '';