query("SELECT * FROM cuisines ORDER BY name"); $cuisines = $cuisines_stmt->fetchAll(PDO::FETCH_ASSOC); // Base query $sql = "SELECT r.id, r.name, r.image_url, GROUP_CONCAT(c.name SEPARATOR ', ') as cuisines, AVG(ra.rating) as average_rating FROM restaurants r LEFT JOIN restaurant_cuisines rc ON r.id = rc.restaurant_id LEFT JOIN cuisines c ON rc.cuisine_id = c.id LEFT JOIN ratings ra ON r.id = ra.restaurant_id"; $where_clauses = []; $params = []; // Search functionality if (!empty($_GET['search'])) { $where_clauses[] = "r.name LIKE :search"; $params[':search'] = '%' . $_GET['search'] . '%'; } // Cuisine filter if (!empty($_GET['cuisine'])) { $where_clauses[] = "r.id IN (SELECT restaurant_id FROM restaurant_cuisines WHERE cuisine_id = :cuisine_id)"; $params[':cuisine_id'] = $_GET['cuisine']; } if (!empty($where_clauses)) { $sql .= " WHERE " . implode(' AND ', $where_clauses); } $sql .= " GROUP BY r.id"; // Sorting functionality $sort_order = $_GET['sort'] ?? 'name_asc'; switch ($sort_order) { case 'rating_desc': $sql .= " ORDER BY average_rating DESC"; break; case 'name_desc': $sql .= " ORDER BY r.name DESC"; break; default: $sql .= " ORDER BY r.name ASC"; break; } $stmt = db()->prepare($sql); $stmt->execute($params); $restaurants = $stmt->fetchAll(PDO::FETCH_ASSOC); ?>

Our Restaurants

No restaurants found matching your criteria.