使用join的mySQL查询

时间:2011-03-23 00:53:27

标签: mysql date join

我有两张桌子 - 'cityname'和'citymoisture'。

'cityname' has 2 columns:  
-city_ID <- integer and primary key that increments automatically  
-city_full_name <- character name i.e. boston, toronto, new york city etc...  

'citymoisture' has 7 columns:  
-city_ID <- tied to the city_ID field via a Foreign Key  
-date  
-time  
-open  
-high  
-low  
-close  

我想做的是 -

通过指定城市名称和日期范围,在水分表中查询open,high,low和close中的任何一个。

以下查询有效:

USE moisturedb  
SELECT citymoisture.date, citymoisture.time, citymoisture.close  
FROM citymoisture  
WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14') AND citymoisture.city_id=5;

但这只引用了'citymoisture'表。我有一个前端应用程序,允许用户选择城市名称,所以在某种意义上我想运行一个联接查询,根据cityname表中的city_full_name列删除结果。

我在几次加入查询时都没有成功。我还花了最后几个小时搜索联接查询示例而没有任何成功。

非常感谢你的帮助。

作为Nikhil请求的后续跟踪,这是建议查询的示例输出。

| 2011-03-10   | 03:38:00     | 0.918 |
| 2011-03-10   | 03:39:00     | 0.897 |
| 2011-03-10   | 03:40:00     | 0.917 |
| 2011-03-10   | 03:41:00     | 0.915 |
| 2011-03-10   | 03:42:00     | 0.914 |
| 2011-03-10   | 03:43:00     | 0.924 |
| 2011-03-10   | 03:44:00     | 0.922 |
| 2011-03-10   | 03:45:00     | 0.922 |
| 2011-03-10   | 03:46:00     | 0.923 |
| 2011-03-10   | 03:47:00     | 0.935 |
| 2011-03-10   | 03:48:00     | 0.953 |
| 2011-03-10   | 03:49:00     | 0.927 |  
| 2011-03-10   | 03:50:00     | 0.962 |  
| 2011-03-10   | 03:51:00     | 0.914 |  
| 2011-03-10   | 03:52:00     | 0.935 |  
+--------------+--------------+-------+  
14770 rows in set (2 min 28.80 sec)  

第3列是水分数据。查询中每个城市的值在它们一个接一个地堆叠的意义上编织在一起。我非常想要以下输出,其中每个城市的水分数据显示在不同的列中:

2011-03-10  03:49:00  0.935  0.935  0.935  .....  
2011-03-10  03:50:00  0.935  0.935  0.935  .....  
2011-03-10  03:51:00  0.935  0.935  0.935  .....  
2011-03-10  03:52:00  0.935  0.935  0.935  .....  
2011-03-10  03:53:00  0.935  0.935  0.935  .....  
2011-03-10  03:54:00  0.935  0.935  0.935  .....  

2 个答案:

答案 0 :(得分:1)

试试这个:

USE moisturedb  
SELECT citymoisture.date, citymoisture.time, citymoisture.close  
FROM citymoisture INNER JOIN cityname ON cityname.city_ID=citymoisture.city_ID
WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14') AND cityname.city_full_name='boston'

答案 1 :(得分:0)

SELECT citymoisture.date, citymoisture.time, citymoisture.close 
FROM citymoisture LEFT JOIN cityname USING (city_ID)
WHERE (citymoisture.date BETWEEN '2011/03/09' AND '2011/03/14')
AND citymoisture.city_full_name='boston';

但是,我认为您在问题中发布的查询是应该使用的查询。您必须拥有一个带有下拉菜单的前端,供用户选择城市。可以使用cityname填充该下拉列表,以便在用户选择城市时将city_ID发送回服务器。然后,您可以在已发布的原始查询中使用city_ID。如需参考,请检查value代码hereoption属性。