Sql 做问题是,我没有将绑定参数传递给准备好的参数!:我现在很尴尬,我把这件事搞了好几个小时,以前我都没发现。很抱歉浪费了你的时间,至少你让我找到了问题的根源。 CREATE TABLE "pt_postal" ( "code&
做问题是,我没有将绑定参数传递给准备好的参数!:我现在很尴尬,我把这件事搞了好几个小时,以前我都没发现。很抱歉浪费了你的时间,至少你让我找到了问题的根源。Sql 做问题是,我没有将绑定参数传递给准备好的参数!:我现在很尴尬,我把这件事搞了好几个小时,以前我都没发现。很抱歉浪费了你的时间,至少你让我找到了问题的根源。 CREATE TABLE "pt_postal" ( "code&,sql,sqlite,user-defined-functions,Sql,Sqlite,User Defined Functions,做问题是,我没有将绑定参数传递给准备好的参数!:我现在很尴尬,我把这件事搞了好几个小时,以前我都没发现。很抱歉浪费了你的时间,至少你让我找到了问题的根源。 CREATE TABLE "pt_postal" ( "code" text NOT NULL, "geo_latitude" real(9,6) NULL, "geo_longitude" real(9,6) NULL ); CREATE UNIQ
CREATE TABLE "pt_postal" (
"code" text NOT NULL,
"geo_latitude" real(9,6) NULL,
"geo_longitude" real(9,6) NULL
);
CREATE UNIQUE INDEX "pt_postal_code" ON "pt_postal" ("code");
CREATE INDEX "coordinates" ON "pt_postal" ("geo_latitude", "geo_longitude");
$db->sqliteCreateFunction('geo', function ()
{
if (count($data = func_get_args()) < 4)
{
$data = explode(',', implode(',', $data));
}
if (count($data = array_map('deg2rad', array_filter($data, 'is_numeric'))) == 4)
{
return round(6378.14 * acos(sin($data[0]) * sin($data[2]) + cos($data[0]) * cos($data[2]) * cos($data[1] - $data[3])), 3);
}
return null;
});
SELECT
"code",
geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") AS "distance"
FROM "pt_postal" WHERE 1 = 1
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
AND "distance" <= 1
ORDER BY "distance" ASC
LIMIT 2048;
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
SEARCH TABLE pt_postal USING INDEX coordinates (geo_latitude>? AND geo_latitude<?)
#(~7500 rows)
USE TEMP B-TREE FOR ORDER BY
SCAN TABLE pt_postal
#(~500000 rows)
USE TEMP B-TREE FOR ORDER BY
SELECT
"code",
geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") AS "distance"
FROM "pt_postal" WHERE 1 = 1
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
AND geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") <= 1
ORDER BY "distance" ASC
LIMIT 2048;
SELECT *
FROM (
SELECT
"code",
geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") AS "distance"
FROM "pt_postal" WHERE 1 = 1
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
)
WHERE "distance" <= 1
ORDER BY "distance" ASC
LIMIT 2048;
SELECT
"code",
geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") AS "distance"
FROM "pt_postal" WHERE 1 = 1
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
GROUP BY "code"
HAVING "distance" <= 1
ORDER BY "distance" ASC
LIMIT 2048;
SELECT
"code",
geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") AS "distance"
FROM "pt_postal" WHERE 1 = 1
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
GROUP BY _ROWID_
HAVING "distance" <= 1
ORDER BY "distance" ASC
LIMIT 2048;
SELECT "code",
geo(38.73311, -9.138707, "geo_latitude", "geo_longitude") AS "distance"
FROM "pt_postal" WHERE 1 = 1
AND "geo_latitude" BETWEEN 38.7241268076 AND 38.7420931924
AND "geo_longitude" BETWEEN -9.15022289523 AND -9.12719110477
AND "distance" <= 1
ORDER BY "distance" ASC
LIMIT 2048;