Пример #1
0
 static function nearest($lat, $lon)
 {
     return Buzzstmt::construct(get_called_class(), "\n            SELECT *\n            FROM `city`\n            ORDER BY\n                ROUND(SQRT(\n                    POW('?' - `lat`, 2) +\n                    POW('?' - `lon`, 2)\n                )) ASC\n            ", $lat, $lon)->one();
 }
Пример #2
0
<?php

$smarty->contentType('text', 'json');
$select = array("`venue`.*", "`hours`.`open`", "`hours`.`close`");
$from = array("`venue`", "`hours`");
$where = array("`venue`.`id` = `hours`.`venue_id`", "`hours`.`weekday` LIKE '%" . strtolower(date('D')) . "%'");
$order = array();
if (isset($_POST['state'])) {
    $where[] = ($_POST['state'] == "closed" ? "NOT" : "") . sprintf("\n        IF(\n            `hours`.`open` < `hours`.`close`,\n            '%s' BETWEEN `hours`.`open` AND `hours`.`close`,\n            '%s' NOT BETWEEN `hours`.`close` AND `hours`.`open`\n        )\n    ", date('H:m:s'), date('H:m:s'));
}
if (isset($_POST['lat'], $_POST['lon'])) {
    $city = city::nearest($_POST['lat'], $_POST['lon']);
    $select[] = sprintf("\n        ROUND(SQRT(\n            POW('%u' - `venue`.`lat`, 2) +\n            POW('%u' - `venue`.`lon`, 2)\n        )) AS `distance`\n    ", $_POST['lat'], $_POST['lon']);
    $where[] = sprintf("\n        `venue`.`city_id` = '%u'\n    ", $city->id);
    $order[] = "\n        `distance` ASC\n    ";
}
$order[] = "`venue`.`id` ASC";
echo json_encode(Buzzstmt::construct("\n    SELECT " . implode(",", $select) . "\n    FROM " . implode(",", $from) . "\n    WHERE " . implode(" AND ", $where) . "\n    ORDER BY " . implode(",", $order) . "\n    LIMIT 10\n    ")->many());