显示可用选项MYSQL查询

时间:2012-02-28 11:16:44

标签: mysql sql

我是PHP和MySQL初学者。我目前正在做一个包括包服务的充值系统。客户可以购买由admin定义的可用包,表分为三个:customer,package,customer_package。客户也可以慢慢花钱包钱,所以金额会变成记录:

CUSTOMER(ID ......)
PACKAGE(ID , OFFER_RATE , PRICE )
CUSTOMER_PACKAGE( ID, AMOUNT , CUSTOMER_ID, PACKAGE_ID )

我向客户显示所有选择没有问题,但我的问题是如果客户已经购买了其中一个,我如何才向客户展示剩余的可用选择?

我对查询的总体看法

SELECT * FROM PACKAGE WHERE ID <>(already in customer_package)

2 个答案:

答案 0 :(得分:0)

如果您事先了解客户的PACKAGE ID,那么您的SQL语句就可以正常运行。

SELECT * FROM PACKAGE WHERE ID <>[CUSTOMERS PACKAGE ID]

如果不这样做,您可以利用子查询..

 SELECT * FROM PACKAGE WHERE ID <> (
    SELECT PACKAGE_ID FROM CUSTOMER_PACKAGE WHERE CUSTOMER_ID=[THE CUSTOMER ID]
)

如果子查询中返回了多个记录,则会出现错误,在这种情况下,您将要使用NOT IN

SELECT * FROM PACKAGE WHERE ID NOT IN (
    SELECT PACKAGE_ID FROM CUSTOMER_PACKAGE WHERE CUSTOMER_ID=[THE CUSTOMER ID]
)

答案 1 :(得分:0)

尝试子查询:

SELECT * 
FROM package 
WHERE ID NOT IN (
    SELECT package_id 
    FROM customer_package 
    WHERE customer_id = 55
);

或加入

SELECT p.* 
FROM package p 
LEFT JOIN customer_package cp ON cp.package_id = p.id AND cp.customer_id = 55 
WHERE cp.id IS NULL

将55替换为正确的客户ID(变量)。