Initial commit
This commit is contained in:
137
index.php
Normal file
137
index.php
Normal file
@@ -0,0 +1,137 @@
|
||||
<?php
|
||||
|
||||
if (!isset($_SERVER['PHP_AUTH_USER']) || !isset($_SERVER['PHP_AUTH_PW'])) {
|
||||
header('HTTP/1.0 401 Unauthorized');
|
||||
header('WWW-Authenticate: Basic realm="Database access"');
|
||||
echo 'Unauthorized access. Please provide valid credentials.';
|
||||
exit;
|
||||
}
|
||||
|
||||
$username = $_SERVER['PHP_AUTH_USER'];
|
||||
$password = $_SERVER['PHP_AUTH_PW'];
|
||||
$con = mysqli_connect("localhost", $username, $password, "test");
|
||||
|
||||
print '<p>Total rows: ' . mysqli_num_rows(mysqli_query($con, "SELECT * FROM floats;")) . '</p>';
|
||||
print '<p>Selecting rows within 50 miles of Seattle...</p>';
|
||||
|
||||
flush();
|
||||
|
||||
print '<dl>';
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "CALL float_coords_within_radius(47.6, -122.33, 50);"); // Within 50 miles of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>floats : procedure</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
mysqli_next_result($con);
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "SELECT * FROM floats WHERE haversine(lat, lon, 47.6, -122.33) < 50;"); // Within 50 miles of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>floats : function</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
mysqli_next_result($con);
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "SELECT * FROM floats WHERE haversine_alt(lat, lon, 47.6, -122.33) < 50;");
|
||||
$end = microtime(true);
|
||||
print '<dt>floats : function alt</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
mysqli_next_result($con);
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "SELECT * FROM floats where acos(
|
||||
cos(radians(lat)) *
|
||||
cos(radians(47.6)) *
|
||||
cos(radians(lon) - radians(-122.33)) +
|
||||
sin(radians(lat)) *
|
||||
sin(radians(47.6))
|
||||
) * 3959 < 50;"); // Within 50 miles of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>floats : inlined</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
|
||||
flush();
|
||||
|
||||
$results = [];
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "SELECT * FROM floats;");
|
||||
while ($row = mysqli_fetch_assoc($result)) {
|
||||
if (haversine($row['lat'], $row['lon'], 47.6, -122.33) < 50) { // Within 50 miles of Seattle
|
||||
$results[] = $row;
|
||||
}
|
||||
}
|
||||
$end = microtime(true);
|
||||
print '<dt>floats : php</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . count($results) . '</dd>';
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "CALL hybrid_coords_within_radius(47.6, -122.33, 80467);"); // Within 80,467 meters (50 miles) of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>hybrid : procedure</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
mysqli_next_result($con);
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "SELECT * FROM floats WHERE ST_DISTANCE_SPHERE(POINT(-122.33, 47.6), POINT(lon, lat)) < 80467;"); // Within 80,467 meters (50 miles) of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>hybrid : inlined</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "CALL point_coords_within_radius(POINT(-122.33, 47.6), 80467);"); // Within 80,467 meters (50 miles) of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>points : procedure</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
mysqli_next_result($con);
|
||||
|
||||
flush();
|
||||
|
||||
$start = microtime(true);
|
||||
$result = mysqli_query($con, "SELECT * FROM points WHERE ST_DISTANCE_SPHERE(POINT(-122.33, 47.6), coord) < 80467;"); // Within 80,467 meters (50 miles) of Seattle
|
||||
$end = microtime(true);
|
||||
print '<dt>points : inlined</dt>';
|
||||
print '<dd>Time taken: ' . ($end - $start) . '</dd>';
|
||||
print '<dd>Results: ' . mysqli_num_rows($result) . '</dd>';
|
||||
|
||||
print '</dl>';
|
||||
|
||||
function haversine($latFrom, $lonFrom, $latTo, $lonTo)
|
||||
{
|
||||
// convert from degrees to radians
|
||||
$latFrom = deg2rad($latFrom);
|
||||
$lonFrom = deg2rad($lonFrom);
|
||||
$latTo = deg2rad($latTo);
|
||||
$lonTo = deg2rad($lonTo);
|
||||
|
||||
$latDelta = $latTo - $latFrom;
|
||||
$lonDelta = $lonTo - $lonFrom;
|
||||
|
||||
$angle = sin($latDelta / 2) * sin($latDelta / 2) +
|
||||
cos($latFrom) * cos($latTo) *
|
||||
sin($lonDelta / 2) * sin($lonDelta / 2);
|
||||
$chord = 2 * atan2(sqrt($angle), sqrt(1 - $angle));
|
||||
|
||||
return 3959 * $chord; // as miles
|
||||
}
|
||||
|
Reference in New Issue
Block a user