mysql顺序与我在变量中的列表相同

时间:2012-01-31 03:38:41

标签: mysql

我正在提取附有城市的信息,我希望信息按顺序显示当前城市,然后按照距离城市搜索的顺序排列城市。我按照顺序排列城市,我希望它们显示在名为$ 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));

任何想法都会非常感谢。

4 个答案:

答案 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条款必须后跟columnField的名称,而不是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));