2010-06-25 93 views
1

给定condtion我有三个表Orders表和客户表和orderstatus表,无论是订单和客户表都CustomerID作为共同的领域,秩序和orderstatus已经order_status_id共同领域三个表的连接查询!下面

客户表有名字,姓氏,电话和电子邮件地址字段。

现在,如果我必须根据客户的名字和/或姓氏和/或电话和/或电子邮件和/或orderid搜索/选择订单,那么应该是什么样的mysql格式的连接查询,以便我可以合并所有这三个表从订单表中获取结果以及orderstatus表中的orderstatus?

+2

你让我很兴奋的问题的主题! ;-) – richsage 2010-06-25 11:52:36

+0

你看到那叫做市场营销/广告/竞选 – 2010-06-25 11:53:38

+0

我点击标题只是为了看看这里是否有超级好玩的东西(小丑?马戏团?)。可能不会。 – 2010-06-25 11:55:54

回答

2

你可以加入表格。根据你当前的数据定义,不需要外部连接或任何东西。

SELECT * 
FROM Orders o, customers c, orderstatus s 
WHERE o.customerid = c.customerid 
AND o.order_status_id = s.order_status_id 
AND c.firstname = 'OM' 
AND c.LASTNAME = 'The Eternity' 
AND o.orderid = 752 
AND ... 
+0

它看起来像你在osCommerce中非常频繁的工作 – 2010-06-25 12:18:35

1

那么,我会开始与左加入所有三个表在一起开始。

然后;构建你的where子句来对每个参数这样的线(基本上,在提供参数的情况下,仅使用过滤器)

WHERE 
(@customerFirstName IS NULL OR @customerFirstName = customers.FirstName) 
AND (@customerLastName IS NULL OR @customerLastName = customers.LastName) 
etc... 

取决于你期望的记录数;或者如果表现欠佳;你可能想要考虑创建一个表变量来保存更小的数据子集。 (即创建一个#客户表;然后只插入符合客户搜索条件的客户,然后将其添加到其他两个表中)

让我知道我是否误解了您的问题;或者如果你想要任何澄清。

+0

是的,我确实需要你对我的问题有所了解吗?从上面给出的条件我需要订单表和订单状态orderstatus表 – 2010-06-25 12:12:22

+0

嗯;不知道我跟着;但如果你将所有三张桌子结合在一起,您可以将订单表和订单状态表中的数据包含在select子句中。 – 2010-06-25 12:21:19

1

喜欢的东西:

SELECT `orders`.* , 
`orderstatus`.`description`, 
`customers`.`firstname`, `customers`.`lastname`, `customers`.`phone`,`customers`.`email` 
FROM `orders` 
LEFT JOIN `customers` ON `customers`.`id`=`orders`.`customerid` 
LEFT JOIN `orderstatus` ON `orderstatus`.`orderid`=`orders`.`id` 
WHERE `customers`.`lastname`='blogs' 

我不知道你的orderstatus表。