【发布时间】:2018-10-06 18:08:14
【问题描述】:
我正在创建一个产品页面,买家只能根据卖家商店坐标和买家坐标从附近的商店订购。 一切正常,除了搜索功能,当我搜索产品时它显示存储在数据库中的所有项目,但我不希望这样我也想在搜索查询中使用 MYSQL 距离。
在搜索的 MYSQL 查询中,我使用联合搜索卖家和产品。我的问题是如何同时实现 MYSQL UNION, INNER JOIN 和 DISTANCE。下面是我的表结构。
产品
id | podkey | price | name | store_key | owner_pkey | pod_status
-----|---------|--------|----------|------------|-------------|------------
1 | 1ab2 | 100 | Dog | sk76n | MBYUU00 | 1
2 | 0kb2 | 180 | Cat | sk76n | MBYUU00 | 1
3 | 5ab1 | 101 | Doggy | sk76n | MBYUU00 | 1
4 | maf1 | 60 | Bird | sk16b | MBYUU00 | 1
5 | baf0 | 90 | Dog | sk78x | KLYUP07 | 1
商店
id | skey | ownerkey | lat | lng | name
----|-------|----------|------------|------------|-----------------
1 | sk76n | MBYUU00 | 2.922597 | 101.661896 | Cyberjaya store
2 | sk16b | MBYUU00 | 3.7384847 | 107.893837 | Puchong store
3 | sk78x | KLYUP07 | 7.64874646 | 883.893839 | My only store
所有者
id | name | owner_key
----|---------|--------------
1 | peter | MBYUU00
2 | john | KLYUP07
下面是当前用于在页面上显示项目并且正在工作的内容
SELECT p.id, p.podkey, p.price, p.name, p.store_key, p.pod_status, s.id, s.skey, s.ownerkey, s.name, o.id, o.name, o.owner_key,
SQRT(POW(69.1 * (s.lat - :getBuyerLat), 2) + POW(69.1 * (:getBuyerLon - s.lng) * COS(s.lat / 57.3), 2)) AS distance
FROM product p
INNER JOIN Owners o
ON p.owner_pkey = o.owner_key
INNER JOIN store s
ON s.skey = p.store_key
WHERE p.pod_status = 1
HAVING distance <= 5
以下查询是我在搜索中尝试的,但它没有返回任何内容或显示任何错误
SELECT * FROM (
SELECT 'products' as type, pod_status AS stat, name AS name, price AS price, store_key AS skey, NULL AS distance FROM product p
UNION
SELECT 'sellers' as type, 1 AS stat, name AS name, NULL AS price, NULL AS skey, NULL AS distance FROM Owners o
UNION
SELECT 'outlets' as type, 1 AS stat, name AS name, NULL AS price, skey AS skey,
SQRT(POW(69.1 * (s.lat - :getBuyerLat), 2) + POW(69.1 * (:getBuyerLon - s.lng) * COS(s.lat / 57.3), 2)) AS distance
FROM store s
) sfoo
INNER JOIN store sj
ON sj.skey = sfoo.store_key
WHERE sfoo.name LIKE %dog% AND sfoo.stat = 1 HAVING distance <= 5
任何人都可以在这里帮助我是 MCVE http://sqlfiddle.com/#!9/afaf39/2/0
【问题讨论】:
-
@Strawberry,感谢您的更新,我将创建一个
-
@Strawberry 请参考此链接sqlfiddle.com/#!9/afaf39/2/0
标签: mysql sql inner-join union latitude-longitude