关于 left join 多表查询的语句,在线求!

chemstudy2 2012-03-02 10:08:36
我这里有两个MYSQl 表:

表1: 存放的是商品信息,字段如下:商品ID、商品名字、商品规格 、商品产地
good_id////good_name////good_guige///good_chandi
1 -------- 白菜 ------统货 --------- 山东
2 ---------芹菜 ----- 统货 ----------河北
5 ---------胡萝卜 ----统货 ----------河北

...
...
...




表2:存放的是商品的价格信息,每种商品每个月都有不同的价格,字段如下:所属商品ID、商品价格、添加时间

good_item_id....good_jiage....add_time
1 -------------3.33 ------2001-1-1
1 ------------ 4.33 ------ 2001-2-1
1 ----------- 5.33 ------- 2001-3-1
1 ---------- 6.33 ------- 2001-4-1
1 --------- 7.33 ---------2001-5-1
1 --------- 8.33 -------- 2001-6-1
2 -------------3.33 ------2001-1-1
2 ------------ 4.33 ------ 2001-2-1
2 ----------- 5.33 ------- 2001-3-1
2 ---------- 6.33 ------- 2001-4-1
2 --------- 7.33 ---------2001-5-1
2 --------- 8.33 -------- 2001-6-1
5 -------------3.33 ------2001-1-1
5 ------------ 4.33 ------ 2001-2-1
5 ----------- 5.33 ------- 2001-3-1
5 ---------- 6.33 ------- 2001-4-1
5 --------- 7.33 ---------2001-5-1
5 --------- 8.33 -------- 2001-6-1

两个表中 good_id 、good_item_id 两个字段是关联字段

我打算实现这样的查询效果:

蔬菜列表:
------------------------------
菜名-----规格---- 产地 ---- 最新价格

白菜-----统货 -----山东-----8.33
芹菜 .... ................ 7.77
胡萝卜 .... ............. ....

在PHP中操作好像要多表联合查询,还有朋友告诉我做个视图也行,我是PHP新手,单表查询还可以,这个弄不来,求各位出个主意。

我得难点在于,蔬菜品种太多了,价格也太多了(近5年的价格统计,表2数据过万),如何查询效率较高?并且,查询结果只显示 蔬菜的当月最新价格!


...全文
335 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
chemstudy2 2012-03-03
  • 打赏
  • 举报
回复
    $query=mysql_query("select 表1.*,表2.good_jiage from 表1 left join(select good_jiage,add_date from 表2 order by add_date limit 1 )as pp on  表1.good_id=表2.yc_item_id") or die(mysql_error()) ;


我用PHP ,上面语句执行错误:Unknown column '表2.good_jiage' in 'field list'
chemstudy2 2012-03-03
  • 打赏
  • 举报
回复
我是菜鸟,很多例子看不懂,忘楼上大哥的举手之劳!!赐给一段代码吧!
ACMAIN_CHM 2012-03-03
  • 打赏
  • 举报
回复
分组取日期最大的一个。

参考下贴中的多种方法

http://topic.csdn.net/u/20091231/16/2f268740-391e-40f2-a15e-f243b2c925ab.html
[征集]分组取最大N条记录方法征集,及散分....
ACMAIN_CHM 2012-03-03
  • 打赏
  • 举报
回复
会耗时,因为你的表没创建相关索引。


create index xxxx on yc_jiage (yc_item_id,add_date)
chemstudy2 2012-03-03
  • 打赏
  • 举报
回复
多谢大哥了,顺便问一句,当右表(价格表)数据多达10万时,这种查询会不会非常耗时??
ACMAIN_CHM 2012-03-03
  • 打赏
  • 举报
回复
mysql> select yc_name as `名称`,
-> yc_chandi as `产地`,
-> yc_guige as `规格`,
-> yc_jiage as `最新价格`
-> from yc_pinzhong a ,yc_jiage b
-> where a.yc_id=b.yc_item_id
-> and not exists (select 1 from yc_jiage where yc_item_id=b.yc_item_id and add_date>b.add_date);
+-------+------+------+----------+
| 名称 | 产地 | 规格 | 最新价格 |
+-------+------+------+----------+
| 白菜 | 安徽 | 统货 | 8.50 |
+-------+------+------+----------+
1 row in set (0.07 sec)

mysql>

56,678

社区成员

发帖
与我相关
我的任务
社区描述
MySQL相关内容讨论专区
社区管理员
  • MySQL
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧