【发布时间】:2015-08-13 08:59:29
【问题描述】:
我正在尝试根据用户搜索从多个表中获取数据。 但它不符合我的要求。
我要从中获取记录的表:
- 街道
- 城市
- 状态
假设用户输入'a',然后我想先从街道表中搜索,然后我想在城市表中查找,最后我想在州表中查找。
试过了:
我正在使用这个查询来获取记录:
SELECT streetObj.street_id AS street_id, CONCAT( streetObj.name, ' , ', cityObj.name, ' , ', stateObj.name ) namet
FROM street streetObj
LEFT JOIN city cityObj ON streetObj.city_id = cityObj.city_id
LEFT JOIN state stateObj ON stateObj.state_id = cityObj.state_id
WHERE (
streetObj.name LIKE 'a%'
OR cityObj.name LIKE 'a%'
OR stateObj.name LIKE 'a%'
)
LIMIT 10
但是这个查询首先从州表中搜索,然后从城市表中搜索,最后从街道表中搜索。
如何更改顺序以查看表格?
解释:
街道:
Ram darbar
chawala street
palam street
城市:
Kota
Ahemdabad
Jaipur
州:
Rajasthan
Chennai
Gujrat
所以我想在用户输入“R”或“r”时看到这样:
Ram darbar,Jaipur,Rajasthan
但是我的查询给了我这样的结果:
palam street,Jaipur,Rajasthan
这也没有意义。
【问题讨论】:
-
将 cityObj.name 和 stateObj.name 从 WHERE 子句移动到 ON 子句以获得真正的 LEFT JOIN 行为。 (就像现在一样,它作为常规内部连接执行......)
-
这将如何改变结果?我认为您的问题并不能说明您到底想要什么?
-
因为按照我的要求,Street在city,而city在state,所以我需要按照这种格式显示数据;街道名称,城市名称,州名,
-
请稍等,我正在举这个问题的例子,这将清除我的要求。
-
你怎么知道它首先是在州搜索,然后是城市,然后是街道......即使查询会在你使用或条件的所有表中搜索。
标签: mysql sql sql-order-by