mysql查询结果中取第一个_MySQL查询从表中检索数据,第二个查询拉取其他结果,而不重复...

我一直在这里狩猎了一段时间,但是没有什么是真正能够满足我需要的。

我正在搜索包含经度和纬度值的表格。这将返回一组结果。还有一些条目没有我需要根据某些日期值返回的long / lat值。

我知道这两个通常不会产生重复结果,但我仍然有兴趣知道如何做这种查询。

Q1:

"SELECT id, from_date, to_date, event_title, event_longitude, event_latitude,

(SQRT( POW( 69.1 * ( event_latitude - 51.4999501637 ) , 2 ) +

POW( 69.1 * ( -0.195226 - event_longitude ) * COS( event_latitude / 57.3 ) , 2 ) )

* 1609.344) AS distance, (SQRT( POW( 69.1 * ( event_latitude - 51.4999501637 ) , 2 )

+ POW( 69.1 * ( -0.195226 - event_longitude ) * COS( event_latitude / 57.3 ) , 2 ) )

* 1609.344) AS true_distance FROM table1 WHERE id!=0 AND no_place='0'

AND from_date >= '45645646' AND to_date <= '76647446' HAVING distance <= '5000'

ORDER BY distance ASC LIMIT 50"这将返回匹配long / lat范围的条目并忽略标记为no_place = 0的任何条目。这使用Haversine做长/拉特计算。

第二个查询需要提取没有长/纬度但与日期范围匹配的条目:

Q2:

"SELECT id, from_date, to_date, event_title, event_longitude, event_latitude FROM

table1 WHERE no_place='1' AND from_date >= '45645646' AND to_date <= '76647446'

LIMIT 50"我可以在这里运行两个单独的查询,并追加

“WHERE IDS!in(ids,from,q1)”

到第二个查询,然后用PHP来合并这两个结果,MySQL必须有一些狡猾的方法来做到这一点;所以问题是这样的:

我怎样才能在一个查询中做到这一点,并忽略Q1中已经发现的任何id。我知道我有no_place列,在这种情况下,将保证我没有重复的行,但假设我没有这个列,我将如何去添加

"WHERE ids !in(ids,from,q1)"条款?此外,我想我可能需要先订购no_place = 1条目,然后按距离值排序的no_place = 0条目,然后订购这个总结果。

唷!

来自“希望我帮助”的伟大答案后更新

所以这似乎工作,但它失去了结果中的距离值:

(SELECT id, from_date, to_date, event_title, event_longitude, event_latitude,

(SQRT( POW( 69.1 * ( event_latitude - 51.4999501637 ) , 2 ) + POW( 69.1 *

( -0.195226 - event_longitude ) * COS( event_latitude / 57.3 ) , 2 ) ) * 1609.344)

AS distance, (SQRT( POW( 69.1 * ( event_latitude - 51.4999501637 ) , 2 ) + POW( 69.1

* ( -0.195226 - event_longitude ) * COS( event_latitude / 57.3 ) , 2 ) ) * 1609.344)

AS true_distance FROM table1 WHERE id!=0 AND no_place='0'

HAVING distance <= '5000' ORDER BY distance ASC LIMIT 50) UNION(SELECT id, from_date,

to_date, event_title, event_longitude, event_latitude, 0, 0 FROM table1 WHERE

no_place='1' LIMIT 50)这工作,但我现在没有半径限制在查询中...

(SELECT id, from_date, to_date, event_title, event_longitude, event_latitude,

(SQRT( POW( 69.1 * ( event_latitude - 51.4999501637 ) , 2 ) +

POW( 69.1 * ( -0.195226 - event_longitude ) * COS( event_latitude / 57.3 ) , 2 ) )

* 1609.344) AS distance, (SQRT( POW( 69.1 * ( event_latitude - 51.4999501637 ) , 2 )

+ POW( 69.1 * ( -0.195226 - event_longitude ) * COS( event_latitude / 57.3 ) , 2 ) )

* 1609.344) AS true_distance FROM table1 WHERE id!=0 AND no_place='0' ORDER BY

distance ASC LIMIT 50) UNION(SELECT id, from_date, to_date, event_title,

event_longitude, event_latitude, 0, 0 FROM table1 WHERE no_place='1' LIMIT 50)有任何想法吗?

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值