【问题标题】:MySQL Query Help, Multiple TablesMySQL 查询帮助,多表
【发布时间】:2012-07-07 22:49:07
【问题描述】:

我有一个应用程序,它有一个表,其中存储了我用于此查询的所有数据:

选择项目,姓名,地址,城市,州,邮编,纬度,经度,过期时间,照片,(((acos(sin((".$submission->latitude."*pi()/180))) * sin((latitude*pi()/180))+cos((".$submission->纬度."*pi()/180)) * cos((latitude*pi()/180)) * cos(((".$submission->longitude."- longitude)*pi()/180))))*180/pi())*60*1.1515*1.609344) 作为距离Offers HAVING distance '$daytime - 6' ORDER BY distance;

基本上,查询会找到所选信息,执行计算以找到与 $submission->latitude/longitude 的距离并按这些距离排序。

由于一些外包开发工作,选择数据现在分布在 3 个表中: 餐桌业务: business_id、姓名、地址、城市、州、邮编

桌子位置: business_id, location_id, 纬度, 经度

餐桌优惠: business_id、商品、过期、照片

我有很多时间得到一个查询以在拆分表结构上产生相同的结果。我已经尝试在 business_id 变体上加入 JOIN,但似乎抱怨未知列和/或每个派生表都必须有自己的别名。

我绝不是一个优秀的 MySQL 查询构建器,因此我要求在正确的方向上推动我如何处理这个问题。

提前致谢。

【问题讨论】:

  • 还有一件事,问题似乎集中在距离计算上,并让这些计算发生在正确的地方。我可以在桌子上做一个 JOIN 没有问题,只是不能添加距离计算。这几乎就像我需要做一个 JOIN,然后从加入的结果中选择,只是不知道该怎么做。
  • 通常 HAVING 进入具有 GROUP BY 子句以引用组计算结果的查询。如果您仅在该 HAVING 子句中出现错误,我不会感到惊讶。尝试改用 WHERE,看看是否能解决您的问题。另一方面,我在您的查询中没有看到任何 JOIN。请用连接编写您的查询,如果您可以发布您正在使用的表的架构,这将很有帮助。

标签: mysql


【解决方案1】:

您必须简单地加入您的查询

$t1 = business table
$t2 = location tabe
$t3 = offers table

SELECT $t1.*,
       $t2.location_id,($t2.latitude .. compute ),($t2.longitude ... compute),
       $t3.item, $t3.expiration, $t3.photo
FROM $t1
JOIN $t2 on $t1.business_id = $t2.business_id
JOIN $t3 on $t3.business_id = $t1.business_id

【讨论】:

    【解决方案2】:

    这段代码应该可以做到。

    Select b.name, b.address, b.city, b.state, b.zip, c.location_id,     c.latitude, c.longitude, d.item, d.expiration, d.photo
    FROM business b LEFT JOIN location c
    ON b.business_id = c.business_id
    LEFT JOIN offers d
    ON b.business_id = d,business_id;
    

    【讨论】: