但是,由于第二个查询是在第一个查询的循环中运行的,因此我无法对第一个查询返回的结果重新排序。将两个查询合并为一个并重新排序
第一个查询总是返回结果,第二个查询 - 有时候,但是当它需要时,我需要这些结果在最上面。默认情况下,结果按距离排序,从最近开始。
例如,这里就是我现在得到:
- 名1(PHONE1) - 0.1英里
- 名称2(PHONE2) - 0.4英里
- NAME3(电话3) - 1.3英里< - 现在打开(查询2匹配)
- NAME4(PHONE4) - 2.4英里
我想看到什么:
- NAME3(电话3) - 1.3英里< - 现在打开(查询2匹配)
- 名1(PHONE1) - 0.1英里
- 名称2(PHONE2) - 0.4英里
- NAME4(PHONE4) - 2.4 MI
这里是我当前的查询(简体):
查询1:
SELECT
t1.busName,
t1.busPhone
FROM t1
WHERE t1.lat BETWEEN $min_lat AND $max_lat
AND t1.lon BETWEEN $min_lon AND $max_lon
ORDER BY (POW((t1.lon-$lon),2) + POW((t1.lat-$lat),2))
LIMIT 5
查询2:
SELECT COUNT(t3.rule_id) AS rcount
FROM t3
LEFT JOIN t2 ON (t3.rule_busID = t2.busID)
WHERE t3.APIid = '".$APIid."'
还有一个问题,我有是,有没有办法建立T1和T3之间的直接连接。唯一的办法是让T2
t1.APIid = t2.APIid
t2.busID = t3.rule_busID
表结构如下:
t1
--------------------------------------
busName | busPhone | lon | lat | APIid
t2
--------------------------------------
busID | APIid
t3
--------------------------------------
rule_id | rule_busID
目前,有两个疑问,如果我返回10个结果我要运行11个查询。理想情况下,我只想做一次。
对不起,这可能很明显,但我卡住了。
什么是你的表结构?和他们的关系? – nacho
@nacho我添加了表格结构。所有关系都在OP中。 – santa
你应该更精确地解释你想要订购结果的方式。按距离ASC,numberOfRules DESC? –