检查一个表列中的值以查找其相关TABLE的信息

时间:2014-11-04 08:26:50

标签: php mysql

说我只有三张桌子。 Order_List,Delivery_Order和InfiStall_Order:

Order_List是我们目前收到的整个订单的表格,包括但不限于:产品代码(' id_cart' ) ,客户名称('客户' ),已用付款('付款' )以及获取方式产品('方法' )。


 ------------------------------------------------------
 id_cart         customer        payment       method
 ------------------------------------------------------
  0001           Klaudia         creditcard   Infistall  
  0002           Klaudia         paypal       Delivery 
  0003           MyFather        Transfer     Delivery 
  0004           MyMother        Transfer     Infistall 
 -------------------------------------------------------

获取产品的方法分为两种方法:'交付' &安培; ' InfiStall':

交付是客户希望将产品交付到地址的地方,而InfiStall是客户希望通过将产品送到我们列出的商店来获取产品的地方。

由于交付和InfiStall都有特定的附加信息,例如位置,城市或国家/地区,因此他们必须拥有自己的表格。如下:

说这是交付表Delivery_Order

  ------------------------------------------------------
  id_cart         location        address       status
  ------------------------------------------------------
  0003           Asia            Japan        Delivered 
  0004           Africa          Maroko       Delivered 
 -------------------------------------------------------

并说这是Infistall InfiStall_Order

的表格
 ------------------------------------------------------
 id_cart         location        address       status
 ------------------------------------------------------
  0001           Pluto           Nowhere       Picked-up  
  0002           Markurius       Showhere      Waiting 
 -------------------------------------------------------

所有表都有名为id_cart的列。这就是为什么,首先,我想根据id_card选择所有信息。

我想要的是,

当客户登录他的帐户(比如名为Klaudia的用户)并且她将看到他们的订单历史记录时,他们会看到如下:

 -----------------------------------------------------------------------
 id_cart         products        quantity       invoices     status
 -----------------------------------------------------------------------
                 this               2             $20        Picked
  0001           that               1             $20       (See Detail)
                 those              2             $20        
 -----------------------------------------------------------------------
                 this               2             $20        Delivered
  0002           that               1             $20       (See Detail)
                 those              2             $20        
 -----------------------------------------------------------------------

然后,当Klaudia点击See Detail链接时,它会显示来自deliver_order / infistall_order的信息

1 个答案:

答案 0 :(得分:2)

您必须专门选择每个项目,因为某些列将是不明确的(在表格中具有相同的名称。

SELECT
  o.id_cart  AS id,
  d.location AS deliverLocation,
  i.location AS infiLocation,
  ... etc
FROM Order_List o
LEFT JOIN Delivery_Order d
  ON o.id_cart = d.id_cart
LEFT JOIN InfiStall_Order i
  ON o.id_cart = i.id_cart
WHERE o.customer = 'Klaudia'

如果表Delivery_Order或InfiStall_Order中的任何一个表可能不包含任何行,则必须使用LEFT JOIN而不是JOIN

编辑现在以LEFT JOIN显示

<强> EDIT2:

如果数据仅在表Delivery_Order或InfiStall_Order中,则使用CASE对其进行评估:

SELECT
  *,
  CASE
    WHEN d.id_cart IS NOT NULL THEN 1
    ELSE 0
  END AS isInDeliver
FROM Order_List o
LEFT JOIN Delivery_Order d
  ON o.id_cart = d.id_cart
LEFT JOIN InfiStall_Order i
  ON o.id_cart = i.id_cart
WHERE o.customer = 'Klaudia'