Показать доступный выбор MYSQL запрос - PullRequest
0 голосов
/ 28 февраля 2012

Я новичок в PHP и MySQL.В настоящее время я делаю пополнение системы, которая включает в себя пакет услуг.Клиент может приобрести доступные пакеты, которые определяются администратором, таблица разделена на три: клиент, пакет, 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 голосов
/ 28 февраля 2012

Попробуйте подзапрос:

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

или JOIN

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 на правильный идентификатор клиента (переменная).

0 голосов
/ 28 февраля 2012

Если вы заранее знаете 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]
)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...