如何通过mysql查询获取所有项目及其值

时间:2015-11-17 18:04:25

标签: mysql join

我有三个mysql表。

表-01:table_item

在此表中,存储具有相应ID的所有项目。项目分为两类。一个是写作类别(catid-1),另一个是服装类别(catid-2)。

---------------------------------------------
| id | catname |  catid | itemid | itemname |
---------------------------------------------
║  1 ║ writing ║    1   ║   1    ║   Pen    ║
║  2 ║ writing ║    1   ║   2    ║  Pencil  ║
║  3 ║ writing ║    1   ║   3    ║ Sharpner ║
║  4 ║clothing ║    2   ║   4    ║   Pant   ║
║  5 ║clothing ║    2   ║   5    ║   shirt  ║
║  6 ║clothing ║    2   ║   6    ║   coat   ║
║  7 ║clothing ║    2   ║   7    ║   Tie    ║
---------------------------------------------

表-02:bid_item

每年都会要求出价/招标从上面的项目表(table_item)购买选择性项目。因此,在此表中,选择的项目(选择用于投标/投标)将按年存储。

----------------------
║ id ║ itemid ║ year ║
----------------------
║  1 ║   1    ║ 2015 ║
║  2 ║   2    ║ 2015 ║
║  3 ║   3    ║ 2015 ║
║  4 ║   4    ║ 2015 ║
║  5 ║   5    ║ 2015 ║
║  6 ║   6    ║ 2015 ║
║  7 ║   1    ║ 2016 ║
║  8 ║   2    ║ 2016 ║
║  9 ║   3    ║ 2016 ║
║ 10 ║   4    ║ 2016 ║
║ 11 ║   7    ║ 2016 ║
----------------------

表-03:bid_2015

在调用出价/投标后,所选项目的相应公司的费率将存储在此表中。每家公司都不会为特定年份的每个项目提供出价。表是根据year别名创建的。此处2015年的出价率存储如下:

--------------------------------
║ id ║ itemid ║ company ║ rate ║
--------------------------------
║  1 ║   1    ║   X     ║  2.0 ║
║  2 ║   2    ║   X     ║  2.2 ║
║  3 ║   3    ║   X     ║  1.0 ║
║  4 ║   4    ║   X     ║ 10.0 ║
║  5 ║   5    ║   X     ║ 15.0 ║
║  6 ║   1    ║   Y     ║  1.5 ║
║  8 ║   2    ║   Y     ║  2.0 ║
║  9 ║   3    ║   Y     ║  1.5 ║
║ 10 ║   4    ║   Y     ║ 12.0 ║
║ 11 ║   6    ║   Y     ║ 20.0 ║
--------------------------------

我需要一个html表(带有输入字段),用于特定年份的数据输入/编辑(此处,2015年)。表格将包含以下内容:

1)表格将显示2015年招标/招标中clothing catagory (catid-2)的每个项目。

2)如果公司出价,价格将在费率栏中,否则费率栏将为空白。管理员可以更改价格(如果输入错误的出价),也可以为特定表格中未输入的其他项目添加费率。

因此html表格的外观如下:

HTML Form-Table (For Data Entry/Edit) : For Company-Y and clothing catagory for the year-2015

Company: (drop-down menu- Company-Y)
------------------------------------------------------
  Item Name |  Rate  |
----------------------
   Pant     | 12.0   |         
-----------------------
   Shirt    |          
-----------------------
    Coat    | 20.0    |          
-----------------------
      ============
         Submit
      ============

正如你所见,公司-Y的衬衫价格为空白,因为该公司没有给出衬衫的报价。如果该公司稍后给出衬衫的价格,可以输入费率并可以更新表格。

那么获取上面的html表格会是什么样的mysql查询? 如果我执行此查询:

SELECT i.itemname,d.rate FROM table_item as i INNER JOIN bid_item as b ON i.itemid=b.itemid LEFT JOIN bid_2015 as d ON b.itemid=d.itemid WHERE i.catid=2 AND d.company='Y' AND b.year=2015

但是预期的html表还没有到来。使用INNER和LEFT Join时,Item Name在表格表格中不止一次显示。

输出如上所述的html表格表的有效mysql查询是什么?

2 个答案:

答案 0 :(得分:2)

enter image description here

这适用于2015年Y公司的所有数据

select itemname,
      rate 
from table_item join bid_item on(table_item.itemid=bid_item.itemid and year=2015 and catid=2) 
left join bid_2015 on( bid_2015.itemid=bid_item.itemid and
  bid_item.itemid=table_item.itemid and company='Y' and year=2015 and catid=2)

答案 1 :(得分:1)

此查询可以正常工作。

SELECT i.itemname,
d.rate 
FROM table_item as i 
INNER JOIN bid_item as b ON i.itemid=b.itemid AND b.year=2015
LEFT JOIN bid_2015 as d ON b.itemid=d.itemid AND d.company='Y'
WHERE i.catid=2  
  

注意:

     
    

当你在桌子上LEFT/RIGHT joins时(比如说b)     你的例子如下)。永远不要将table 'b'的条件放在WHERE中     条款。它将充当INNER JOIN

  
     

所以这段代码

 SELECT i.itemname,
        d.rate 
   FROM table_item as i 
   INNER JOIN bid_item as b ON i.itemid=b.itemid 
   LEFT JOIN bid_2015 as d ON b.itemid=d.itemid 
  WHERE i.catid=2 AND d.company='Y' AND b.year=2015
     

如下所示INNER JOIN

SELECT i.itemname,
            d.rate 
       FROM table_item as i 
       INNER JOIN bid_item as b ON i.itemid=b.itemid 
       INNER JOIN bid_2015 as d ON b.itemid=d.itemid 
      WHERE i.catid=2 AND d.company='Y' AND b.year=2015

希望这有帮助。