我正在提取附有城市的信息,我希望信息按顺序显示当前城市,然后按照距离城市搜索的顺序排列城市。我按照顺序排列城市,我希望它们显示在名为$ nearby_city_array的数组中。根据它在我的阵列中显示的位置,有没有什么方法可以按顺序提取数据?
$query = "SELECT
username, city, state
FROM
...
WHERE
city = '" . $city . "'
state = '" . $state . "'
ORDER BY " . $nearby_city_array . ";
$result = mysql_query($query, $db) or die(mysql_error($db));
任何想法都会非常感谢。
答案 0 :(得分:2)
虽然您找到了更好的解决方案,即使用存储在数据库中的信息,但是访问此问题的其他人可能会搜索原始问题的解决方案。
这是个主意:
CREATE TEMPORARY TABLE tmp_order (cntup INTEGER AUTO_INCREMENT, city VARCHAR(100))
INSERT INTO tmp_order (city) VALUES ('a'), ('b'), ... -- this is the order
SELECT <fields> FROM mytable JOIN tmp_order USING (city) ORDER BY cntup
这将创建一个临时表,其中包含按顺序排列的数据。如果将此表连接到原始查询并按临时表中的行ID排序结果,则可以得到您想要的结果。
如上所述,如果您可以省略此列表并使用数据库中已存在的数据,那就更好了。
答案 1 :(得分:1)
每个都需要一个数字距离,限制结果,按城市排序并对其进行排序,以便所选城市成为列表中的第一个。
答案 2 :(得分:1)
ORDER BY
条款必须后跟column
或Field
的名称,而不是near_city的记录。
答案 3 :(得分:1)
最终做到了这一点并且工作正常。
$mylat = mylatitude
$mylon = mylongitude
$query = "SELECT
city, state, latitude, longitude,
3959 * 2 * ASIN(SQRT(POWER(SIN((".$mylat." - abs(f.latitude)) * pi()/180/2), 2) + COS(f.latitude * pi()/180) * COS(abs(f.latitude) * pi()/180) * POWER(SIN((".$mylon." - f.longitude) * pi()/180 /2), 2) )) AS `distance`
FROM
...
WHERE
c.posted = 'posted' AND
f.city IN($nearby_city_string) AND
f.state IN($nearby_state_string
ORDER BY `distance` ASC, date DESC LIMIT 0, 30";
$result_nearby = mysql_query($query, $db) or die(mysql_error($db));