我正在使用virtuemart,我有一个表存储有关订单和用户地址的所有信息。当用户登录时,他们会给我一个我称之为“BillTo”的地址,但是当他们制作和订购时,用户可以创建一个名为“shipto”的新地址。因此,如果他们创建一个新的地址'shipto',我必须将发票发送到'billto',并将订单的项目发送到'shipto'。我试图获取所有地址以发送订单的项目。所以我有这样的表
ORDER_ID | TYPE | ADDRESS
----------------------------------
1 BT My office
1 ST My house
2 BT Home home home
3 BT office
3 ST office 2
我需要获取所有ST地址,如果不存在则获取BT地址。
1 ST My house
2 BT Home home home
3 ST office 2
我该怎么做?
编辑:
这是我的SQL查询。
选择o
。order_number
,os
。order_status_name
,ou
。first_name
,ou
。last_name
,{ {1}}。ou
,last_name2
。ou
,phone_1
。ou
,phone_2
。ou
,{{1 }。{。{1}},address_1
。ou
,address_2
。ou
,zip
。ou
FROM city
AS uv
LEFT JOIN fieldtitle
AS #__virtuemart_product_campaigns
ON(pc
。#__virtuemart_order_items
= oi
。pc
)
LEFT JOIN virtuemart_product_id
AS oi
ON(virtuemart_product_id
。#__virtuemart_orders
= o
。oi
)
LEFT JOIN virtuemart_order_id
AS o
ON(virtuemart_order_id
。#__virtuemart_orderstates
= os
。os
)
LEFT JOIN order_status_code
AS o
ON(order_status
。#__virtuemart_order_userinfos
= ou
。ou
)
LEFT JOIN virtuemart_order_id
AS o
ON(virtuemart_order_id
。#__virtuemart_userfield_values
= uv
。uv
)
WHERE(fieldvalue
。ou
='U'或provincia
。o
='C'或order_status
。o
=' S')和order_status
。o
='133'和order_status
。pc
='ST'ORDER BY o.virtuemart_order_id ASC
现在,从查询中删除“AND virtuemart_campaign_id
。ou
='ST'”并使用foreach从结果中删除重复项,但我想在同一个项目中删除查询
答案 0 :(得分:2)
以下是使用SUBSTRING_INDEX
超过GROUP_CONCAT
SELECT ORDER_ID
,SUBSTRING_INDEX(GROUP_CONCAT(`TYPE` ORDER BY `TYPE` DESC),',',1) `TYPE`
,SUBSTRING_INDEX(GROUP_CONCAT(`ADDRESS` ORDER BY `TYPE` DESC),',',1) `ADDRESS`
FROM t
GROUP BY ORDER_ID
答案 1 :(得分:2)
一种方法是,如果'Type'是'ST'包含它,或者如果你的表有一个唯一的行(例如你的情况下为id 2),那么也包括它。
SELECT * FROM table1 t1
WHERE t1.TYPE='ST' OR
t1.ORDER_ID IN (select ORDER_ID from table1 group by ORDER_ID having count(*)=1 )
虽然它有嵌套查询但考虑到你没有太多数据会很容易实现。
答案 2 :(得分:0)
select t1.*
from your_table t1
join
(
select order_id, max(type) as type
from your_table
group by order_id
) t2 on t1.order_id = t2.order_id and t1.type = t2.type